JavaScript 中 Construct 步骤 (论坛回复摘要)

问题


1
2
3
4
5
function  Users(){
}
Users.prototype=5;
var  u= new  Users();
console.log(u.constructor);

输出的是Object();


可是u对象没有constructor属性,当访问u.constructor时找不到,就会向Users.prototype指向的对象(prototype对象中有个constructor属性)中查找,但是现在 sers.prototype=5;所以,理论上console.log(u.constructor);应该输出Number()类型的。这是怎么回事?教程上说constructor属性指向构造函数的,不知道内部怎么实现的,请分析下。


我的回复

In the specification of ECMAScript Language Specification (Edition 3):

13.2.2 [[Construct]]
When the [[Construct]] property for a Function object F is called, the following steps are taken:

1. Create a new native ECMAScript object.

2. Set the [[Class]] property of Result(1) to "Object".

3. Get the value of the prototype property of the F.

4. If Result(3) is an object, set the [[Prototype]] property of Result(1) to Result(3).

5. If Result(3) is not an object, set the [[Prototype]] property of Result(1) to the original Object prototype object as described in section 15.2.3.1.

6. Invoke the [[Call]] property of F, providing Result(1) as the this value and providing the argument list passed into [[Construct]] as the argument values.

7. If Type(Result(6)) is Object then return Result(6).



Step 5 gives the answer of your question.
因为 Users.prototype 是 5, 不是 Object, 所以 u 的内涵原型链[[Prototype]]是 Object, 不是 Users.prototype.
u.constructor --> u.[[Prototype]].constructor --> Object.constructor --> Object()


连接

原贴 http://bbs.csdn.net/topics/390379246


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值