Javascript 对象原型

本文将讲述特殊属性__proto__通过此属性可以获取或设置一个对象的原型

 

一些历史原因:

 

自从__proto__在firefox中出现后,它变得越来越流行了,现在V8(chrome和node.js)和nitro(safari)也支持此属性,但是在ECMAScript5中,并没有相关的规范,而__proto__将在ECMAScript6中,得到支持。

 


函数原型

 

众所周知,在ECMAScript中,一个对象的内部属性prototype是指向自己原型的

 

function A(){…}

var a = new A();

那么

  a.prototype === A // false,并不是这样理解

  a.prototype实际上,应该是undefined

 

我们可以通过Object.getPrototypeOf(对象)来获取对象的原型

再来:

Object.getPrototypeOf(a) === A; // false,因为a = newA(),是让a的原型,”继承”[暂时木有更好的词汇]了A的原型,即A.prototype

Object.getPrototypeOf(a) === A.prototype;// true
 

 

对象原型

 

设置对象的原型,有两个方法[PS:都不支持IE8及以下版本,以上的,就木有测试]:

方法一:

var source = {a:1, b:2};

var obj = Object.create(source);

obj.c = 3;

// obj.a === 1;

// obj.b === 2;

// Object.getPrototypeOf(obj) === source;
 

方法二:

var source = {a:1, b:2};

var obj = {__proto__: source, c: 3};

// obj.a === 1;

// obj.b === 2;

// Object.getPrototypeOf(obj) === source;
 

两种方法,效果是等价的,不过,在定义额外属性的时候,__proto__会比Object.create简单一些。例子见上面 obj.c 的定义。

AND 更多Object.create的详情,请自行搜索呗~。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值