JavaScript 中的原型链是一种实现对象间继承的机制。每个 JavaScript 对象都有一个内部属性 [[Prototype]]
,这个属性指向另一个对象,即该对象的原型。原型对象也有自己的原型,这样就形成了一条原型链。
prototype
属性,这个属性指向一个对象,即原型对象。new
关键字调用构造函数创建的对象。[[Prototype]]
属性链接到其构造函数的原型对象,原型对象也有自己的原型,直到原型为 null
的对象,形成一条链。function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.greet = function() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
};
const alice = new Person('Alice', 30);
alice.greet(); // 输出: Hello, my name is Alice and I am 30 years old.
console.log(alice.__proto__ === Person.prototype); // true
console.log(Person.prototype.__proto__ === Object.prototype); // true
console.log(Object.prototype.__proto__ === null); // true
原因:如果错误地将原型对象设置为 null
或者非对象类型,会导致原型链断裂。
解决方法:确保在设置原型时使用有效的对象。
function MyObject() {}
MyObject.prototype = null; // 错误示例
原因:实例对象和原型对象上可能存在同名属性,实例对象的属性会覆盖原型对象的属性。
解决方法:使用 hasOwnProperty
方法检查属性是否属于实例对象本身。
const obj = {};
Object.prototype.foo = 'bar';
console.log(obj.foo); // 输出: bar
console.log(obj.hasOwnProperty('foo')); // 输出: false
通过理解这些基础概念和常见问题,可以更好地利用 JavaScript 的原型链机制进行开发。
领取专属 10元无门槛券
手把手带您无忧上云