标题:JavaScript函数及其prototype详解
1. 函数基础知识
JavaScript中的函数是一等公民,也是最重要的核心语言特性之一。函数有以下定义形式:
function functionName(arguments){
//函数体
return returnValue;
}
其中,functionName
是函数名,arguments
是函数的参数列表,returnValue
是函数的返回值,函数体是执行函数的语句块。如果函数没有返回值,则返回undefined
。
函数的调用有以下形式:
functionName(args);
其中,args
是参数列表。如果没有参数,则直接使用()
表示调用。
函数可以赋值给变量,也可以作为参数传递给其他函数:
let myFunction = function(args){
//函数体
return returnValue;
}
function callTwice(func, arg){
func(arg);
func(arg);
}
callTwice(myFunction, arg);
2. prototype与继承
JavaScript中的继承是通过prototype
实现的。每个函数都有一个prototype
属性,它是一个对象。这个对象包含了一个constructor
属性,指向函数本身。prototype
上定义的所有属性和方法都将成为函数所创建的所有对象的共有属性和方法。
function Person(name, age){
this.name = name;
this.age = age;
}
Person.prototype.getInfo = function(){
console.log("Name: " + this.name + ", Age: " + this.age);
}
let john = new Person("John", 30);
let jane = new Person("Jane", 25);
john.getInfo(); // 输出 "Name: John, Age: 30"
jane.getInfo(); // 输出 "Name: Jane, Age: 25"
上述代码中,Person
函数定义了一个getInfo
函数并添加到了prototype
中。通过new
关键字,我们创建了两个新的对象john
和jane
,它们都拥有Person
的所有属性和方法,包括getInfo
函数。
同时,也可以使用Object.create
方法来创建继承对象。
let parent = {
name: "Parent",
getInfo: function(){
console.log("Name: " + this.name);
}
};
let child = Object.create(parent);
child.name = "Child";
child.getInfo(); // 输出 "Name: Child"
上述代码中,我们创建了一个包含name
和getInfo
属性的parent
对象。接着,我们通过Object.create
方法创建了一个新的对象child
,并将其原型设置为parent
。由于child
对象没有getInfo
属性,所以它将沿着原型链寻找该属性,最终找到了parent
对象上的getInfo
方法。
3. 示例说明
示例1
function Dog(name, breed){
this.name = name;
this.breed = breed;
}
Dog.prototype.bark = function(){
console.log("Wang!");
}
let myDog = new Dog("Lucy", "Golden Retriever");
myDog.bark(); // 输出 "Wang!"
console.log(myDog.name); // 输出 "Lucy"
上述代码中,定义了一个Dog
函数,同时向其prototype
添加了一个bark
方法。接着,创建了一个新的对象myDog
,并调用了bark
方法和输出了name
属性。
示例2
let person = {
name: "John",
getInfo: function(){
console.log("Name: " + this.name);
}
};
let student = Object.create(person);
student.grade = "A";
student.getInfo(); // 输出 "Name: John"
console.log(student.grade); // 输出 "A"
上述代码中,定义了一个包含name
和getInfo
属性的person
对象,并创建了一个新的对象student
,同时将其原型设置为person
。接着,给新的对象添加了一个grade
属性,最后输出了person
对象和student
对象的属性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript函数及其prototype详解 - Python技术站