Prototype in JavaScript

时间:2021-07-30 03:47:51

声明 本文旨在入门,简单了解下何为prototype & __proto__

原型对象

我们创建每个函数都有个prototype(原型)属性,该属性是一个指针,指向一个对象,而这对象的用途是包含可以由特定类型的所有实例共享的属性和方法。(原型模式)

其中所提及的对象即是我今天所要说的原型对象。

function Person() {
};
Person.prototype.name = 'Jack';
Person.prototype.say = function(){
console.log('say hi');
}
var p = new Person();
p.say();
console.log(p.name);

这是一段原型模式创建对象的demo。

其中Person.prototype指向原型对象,而Person.prototype.constructor指向Person。Person 的每个实例都有个内置的属性[[Prototype]] (也就是平日里熟知的Ff 、Safari以及Chrome为了方便查看对象原型而提供的非标准的‘__proto__’访问器,当然既然是内置的,自然不建议使用),该属性又都指向Person.prototype,也就是指向了原型对象。

我们可以用张图来展示其中各对象之间的关系

Prototype in JavaScript

对不起,明明盗一张图就能说清的问题,我却BB了这么久。

贴出一小段简单代码,提供答案助于消化

function Person() {
};
var p = new Person();
console.log(p.__proto__);
console.log(Person.prototype);
console.log(p.constructor.prototype);
console.log(p.__proto__ === Person.prototype);

Key:

Prototype in JavaScript

才疏学浅,初读《JavaScript高级程序设计》,作此笔记