ECMAScript(通常称为JavaScript)的原型链是一种实现对象间继承和属性查找的机制。原型链的核心概念是每个对象都有一个内部属性[[Prototype]],它指向另一个对象,即该对象的原型。当我们试图访问一个对象的属性时,如果该对象本身没有这个属性,JavaScript 引擎会沿着原型链向上查找,直到找到该属性或到达原型链的顶端(null)。
原型链的实现主要依赖于以下几个部分:
prototype属性,它指向一个原型对象。当我们使用new关键字创建一个新对象时,这个新对象的[[Prototype]]会指向构造函数的prototype属性。function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
console.log('Hello, my name is ' + this.name);
};
var person1 = new Person('Alice');
在这个例子中,Person是一个构造函数,它的prototype属性指向一个原型对象,该对象有一个sayHello方法。当我们创建一个Person实例(如person1)时,它的[[Prototype]]会指向Person.prototype。
__proto__属性:每个对象都有一个非标准的__proto__属性,它指向该对象的原型。这个属性是原型链查找的基础。console.log(person1.__proto__ === Person.prototype); // true
Object.create()方法:这个方法允许我们创建一个新对象,并显式地指定它的原型。var obj = Object.create(Person.prototype);
obj.sayHello(); // Hello, my name is undefined
console.log(person1.name); // Alice
console.log(person1.sayHello); // [Function: sayHello]
console.log(person1.nonExistentProperty); // undefined
在这个例子中,person1对象本身没有name和sayHello属性,但它可以通过原型链找到这些属性。对于不存在的属性,查找会在原型链的顶端(null)结束,返回undefined。
总之,ECMAScript的原型链是通过构造函数、原型对象、__proto__属性和Object.create()方法实现的。这种机制使得对象可以继承属性和方法,并实现动态的属性查找。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。