自学内容网 自学内容网

原型继承和原型链

原型继承

在 JavaScript 中,每个函数都有一个特殊的属性叫做 prototype(原型)。当你用 new 关键字来创建一个对象实例时,这个实例会自动关联到构造函数的 prototype 上。

const Person = function(firstName, birthYear) {
  this.firstName = firstName;
  this.birthYear = birthYear;
};

通过 new Person(‘IT知识一享’, 2024) 创建了一个 ItShare 对象实例。这个实例 ItShare 会有一个隐藏属性 proto,它指向 Person.prototype,即 Person 函数的原型对象。

原型链

原型链是一种机制,允许对象通过它们的原型链查找和继承属性和方法。如果在一个对象上访问属性或方法时,对象本身没有定义,JavaScript 引擎会沿着这个对象的 proto(即它的构造函数的 prototype)向上查找,直到找到对应的属性或方法或者到达原型链的顶端(即 Object.prototype)。

示例

console.log(ItShare instanceof Person); 

true,原因是ItShare 是 Person 的实例;

ItShare.CalcAge(); 

输出 75,通过原型继承,ItShare 实例可以访问到 Person.prototype 上的 CalcAge 方法

.__proto__ === Person.prototype); // true,ItShare 的 __proto__ 指向 Person.prototype
console.log(Person.prototype.isPrototypeOf(ItShare)); // true,Person.prototype 是 ItShare 的原型
console.log(Person.prototype.isPrototypeOf(Person)); // false,Person.prototype 不是 Person 函数自身的原型对象

重点理解

● 原型对象:每个函数在创建时都有一个 prototype 属性,它指向一个对象,这个对象包含函数的默认属性和方法。
● 实例的原型:通过 new 关键字创建对象实例时,实例会有一个 proto 属性,指向构造函数的 prototype。
● 原型链:通过原型链,对象可以访问其构造函数的原型对象上定义的属性和方法。
● isPrototypeOf 方法:用于检查一个对象的原型链中是否包含另一个对象的原型。


原文地址:https://blog.csdn.net/weixin_42952508/article/details/140595784

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!