原型链的解释

1、原型链是什么
原型链是创建与其他对象相似的对象的一种机制,当你为了节省内存或避免重复代码需要两个对象拥有完全相同的属性时,就可能需要从一个对象固执所有属性到另一个对象中,JavaScript提供了原型链的方式,通过将第一个对象中的字段的查找委托于第二个对象的方式,可以使一个对象表现出完全拥有另一个对象的所有属性

2、一次性属性复制:
var gold = {a:1};//创建一个对象并赋值给gold
var blue = extend({},gold)  //这时我们想要变量 blue拥有和gold一样的属性,这时候可以使用一次性属性复制
console.log(blue.a);  //1
注:一次性属性复制是程序运行的某个时间点发生的,而不是持续的行为(也就是说,当这次行为执行完毕后,gold的变化不会对blue造成任何影响)

3、预测原型委托
var gold = {a:1};
var blue = extend({},gold) 
var rose = {} //创建一个变量 rose
var rose = Object.create(gold);我们想要查找一个属性值,但是rose并没有这种属性,我们可以退而求其次的在gold中查找,而object.create()可以创建这种具有“委托查找”功                能的对象,如果gold中同样没有这种属性,那么同样会返回undefined
注:预测原型委托不同于一次性属性复制,他的行为是持续性的,gold的变化或引起rose查找的变化

4、预测原型委托和一次性属性复制的不同,前者是持续的,后者是一次性的
var gold = {a:1};
var blue = extend({},gold)
var rose = Object.create(gold);
gold.z = 3;
console.log(blue.z)  //undefined
console.log(rose.z)  //3

5、对象原型
          如果说原型链这种关系帮助我们创建一个与对象gold相似的对象blue,那么在JavaScript中是否存在其他对象也可以利用这种机制?比如说,gold是否也会把它的字段查找委托到别处?在JavaScript中有一个最高层级的对象存在,每一个JavaScript对象将失败的查找委托到此处,它为所有对象提供所有的基本方法,因为它提供了整个系统中的所有对象的共享属性,我们将它称为对象原型,正因如此,当我们访问一个对象的tostring属性时,才能访问一个实现此功能的函数,tostring被存储在原型链的顶端
          有一个最有用的属性(constructor),用于确认创建某个对象时使用了哪个函数,constructor实际上是指向存储在别处的另一个对象,当rose中不存在constructor属性时,便会沿着原型链往上找,原型对象中的属性constructor指向创建对象的构造函数

6、数组原型
          你创建的大多数对象都会委托于原型对象,但是在JavaScript中创建的某些特殊的对象拥有除所有对象的基本特性以外的特性,比如数列拥有像slice()和indexOf()这样的方法,这些数列方法被存储在另一个被称为数组原型的原型之中,由于数组和对象不同,数组原型甚至拥有某些标准方法的独特版本,比如toString。数组原型的上端为对象原型,这样数组仍可以继承对象原型中那些非数组特有的部分,并非所有的方法都需要在数组原型中重新实现。
          注:数组原型和对象原型都有constructor属性,尽管数组原型是委托于对象原型的。比如你有一个yellow数组,这时候你想查询它的constructor属性,这时它会返回Array而不是Object,因为数组原型中就存在constructor属性,就无需向上在对象原型中查找了


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值