什么是JavaScript中的原型链?

60 阅读1分钟
function Person(name) { 
    this.name = name;
} 
Person.prototype.sayHello = function() { 
    console.log("Hello, my name is " + this.name);
}
var p = new Person("John");
p.sayHello();

我们定义了一个构造函数 Person,并在其原型对象上定义了一个方法 sayHello。然后我们创建了一个实例 p,调用其 sayHello 方法。

  1. 构造函数 Person 中有一个属性 name,其值被赋为 "John"。
  2. 构造函数 Person 的原型对象中有一个方法 sayHello。
  3. 实例 p 中没有属性和方法,但是它的 proto 属性指向构造函数 Person 的原型对象。
  4. 构造函数 Person 的原型对象的 proto 属性指向 Object.prototype,即所有对象的原型对象。
  5. Object.prototype 的 proto 属性为 null,表示原型链的顶端。 在这个示例中,实例 p 通过原型链访问到了构造函数 Person 的原型对象中的方法 sayHello。这是因为在查找属性或方法时,JavaScript 引擎会先在实例对象中查找,如果找到则返回,如果没有找到,则沿着原型链向上查找,直到找到为止。