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 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/27220/55491109

posted @ 2022-09-11 09:57  哈哈哈来了啊啊啊  阅读(13)  评论(0编辑  收藏  举报