ECMAScript prototype的一个疑问。

既然是疑问 当然首先要贴一段代码。

背景: 探究js的原型继承模式。

疑惑:为何person1和person2的prototype 居然是相等的.

附:

1.Object.create(proto, [ propertiesObject ])

参数

proto
一个对象,作为新创建对象的原型。或者为 null。
propertiesObject
可选。该参数对象是一组属性与值,该对象的属性名称将是新创建的对象的属性名称,值是属性描述符(这些属性描述符的结构与 Object.defineProperties()的第二个参数一样)。注意:该参数对象不能是  undefined,另外只有该对象中自身拥有的可枚举的属性才有效,也就是说该对象的原型链上属性是无效的。

抛出异常

如果 proto 参数不是 null 或一个对象值,则抛出一个 TypeError 异常。

2.fun.apply(thisArg[, argsArray])

参数

thisArg
在  fun 函数运行时指定的  this  值。需要注意的是,指定的  this 值并不一定是该函数执行时真正的  this 值,如果这个函数处于 非严格模式下,则指定为  null 或  undefined 时 会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的  this 会指向该原始值的自动包装对象。
argsArray
一个数组或者类数组对象,其中的数组元素将作为单独的参数传给  fun 函数。如果该参数的值 为null 或  undefined,则表示不需要传入任何参数。从ECMAScript 5 开始可以使用类数组对象。浏览器兼容性请参阅本文底部内容。

3. new 

在这里特别对new做一个说明:我们知道在很多编程语言中,new都是关键字,而且new的工作都有很多步。

比如说在c#中new的工作就有四步:1.计算类型字段字节数(包括所有基类型和类型对象指针和同步索引块)

                 2.分配内存,并且把所有字节初始化为零。

                                              3.初始化类型对象指针和同步索引块。

                                              4.调用构造函数。

在js中大致是这样的: 

let Person = function(name){

  this.name = name;

};

let liu = new Person("liu");  ===》   1. Object.create(Person.prototype) 创建一个原型是Person.prototype的对象。

                                                    2. Person.apply(新的对象)  调用Person将新的对象绑定到Person的this。

                                                    3. 如果第二步返回的是一个真值的object,则返回第二步返回的对象,否则就返回第一步返回的对象。

 

这是一个疑问,待我想清楚再回来更新。

转载于:https://www.cnblogs.com/countrybuilder/p/6551420.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值