JavaScript 中的原型继承
JavaScript 中的原型继承
默认情况下,JavaScript 提供 Object() 函数。 Object() 不是一个对象,而是一个函数。
它还提供了一个匿名对象,可以通过 Object() 函数的原型属性进行引用。
Object.prototype 还具有一个重要的属性,称为构造函数,它引用 Object() 函数。
console.log(Object.prototype.constructor===Object) //true
考虑以下脚本:
函数人(姓名){
这个名字=名字;
}
在上面的构造函数 Person 中,JavaScript 创建了一个新函数 Person() 和一个匿名对象:
与 Object() 函数一样,Person() 函数有一个称为原型的属性,它引用一个匿名对象。并且匿名对象具有引用 Person() 函数的构造函数属性。此外,JavaScript 通过 [prototype]] 将 Person.prototype 对象链接到 Object.prototype 对象,这称为原型链接。下图显示了该过程:
Prototypal Inheritance
在原型对象中定义方法
我们可以在对象的原型中定义一个新方法,如下所示:
Person.prototype.greet=function(){
返回“嗨,我是”,this.name;
}
下面创建一个新的 Person 实例
人 p1=新人(“维诺德”);
在内部,JavaScript 引擎创建一个名为“p1”的新对象,并通过原型链接将 p1 对象链接到 Person.prototype 对象。
p1, Person.prototype 到 Object.prototype 的链接称为 ** 原型链。**
下面调用 p1 对象的 greet() 方法:
让greet=p1.greet();
控制台.log(问候); //嗨,我是维诺德
由于 p1 对象没有 greet 方法,JavaScript 遵循原型链接并在 person.prototype 对象中找到它。因为它在 Person.prototype 对象上找到了 greet() 方法,所以它执行了 greet() 方法并返回了结果。
下面调用 p1 对象的 toString() 方法:
让 str=p1.toString();
在这种情况下,JS 引擎会沿着原型链查找 Person.prototype 中的 toString() 方法。因为 Person.prototype 没有这个方法,所以 JS 引擎会沿着原型链去寻找 Object.prototype 中的 toString() 方法,找到就执行。
在单个对象中定义方法
下面定义了 p1 对象的 draw() 方法:
p1.draw=函数(){
返回“我会画画!”
}
在这种情况下,JS 引擎将 draw() 添加到 p1 对象,而不是 Person.prototype 对象。
在对象中定义方法时,该方法仅对该对象可用。默认情况下不能与其他对象共享。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明