Prototype in JavaScript

声明 本文旨在入门,简单了解下何为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,也就是指向了原型对象。

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

对不起,明明盗一张图就能说清的问题,我却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:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值