什么是原型和原型链?
请解释 JavaScript 中 prototype、proto 和 constructor 的概念,以及原型链的查找机制。
回答
编译有声
核心概念:
prototype:函数才有的属性,指向一个对象(原型对象),该对象包含被所有实例共享的属性和方法__proto__:每个对象都有的隐式属性(非标准,但绝大多数环境支持),指向创建该对象的构造函数的prototypeconstructor:原型对象上的属性,指回构造函数本身
原型链查找机制:
obj.prop
1. 查找 obj 自身属性(hasOwnProperty)
2. 如果没找到,查找 obj.__proto__(即 ObjConstructor.prototype)
3. 还没找到,继续查 obj.__proto__.__proto__(即 Object.prototype)
4. 直到 __proto__ 为 null 为止(Object.prototype.__proto__ === null 是原型链终点)
示例:
function Animal(name) { this.name = name; }
Animal.prototype.say = function() { console.log(this.name); };
const dog = new Animal('旺财');
dog.say(); // '旺财'
// 原型链: dog → Animal.prototype → Object.prototype → null
Object.getPrototypeOf(obj) 是获取原型的标准方法。