prototype 和 _ _ proto _ _的关联
在 JavaScript 中,prototype 和 _ _ proto _ _ 是 原型链机制的两个核心概念,它们密切相关但作用不同。
-
prototype
-
定义:构造函数(function)自带的属性,用来存放所有实例共享的方法和属性。
-
作用:当实例访问一个属性或方法时,如果实例本身没有,会沿着实例的原型链到 prototype 上查找。
-
示例:
function Person(name) {this.name = name;
}
Person.prototype.sayHi = function() {console.log(`Hi, I am ${this.name}`);
};const p = new Person('Alice');
p.sayHi(); // Hi, I am Alice
-
_ _ proto _ _
-
定义:对象的内部属性(在大多数浏览器里可以通过 proto 访问),指向 创建该对象的构造函数的 prototype。
-
作用:用于查找属性和方法,即 原型链的指针。
-
示例:
console.log(p.__proto__ === Person.prototype); // true
-
它们的关联
-
构造函数与 prototype 的关系:
- Person.prototype 是构造函数的原型对象,存放实例共享方法。
-
实例与 proto 的关系:
- 实例 p 的 proto 指向 Person.prototype。
-
查找机制:
- 当访问 p.sayHi() 时,JS 会先在 p 自身查找,没有找到,就沿着 p.proto(也就是 Person.prototype)查找。
-
一句话总结:
-
构造函数的 prototype:存放实例共享属性和方法
-
实例的 proto:指向构造函数的 prototype,用于原型链查找