javascript关闭__proto__

时间:2017-08-09 17:30:17

标签: javascript closures prototype

function makeAdder(x) {
  return function(y) {
    return x + y;
  };
}
var add5 = makeAdder(5);
add5(2); //7;
add5(2).__proto__;  //0`

这很有道理。但是,add5(2)是对象吗?为什么有0?

1 个答案:

答案 0 :(得分:2)

我不知道您运行代码的环境,但是当您尝试在数字值上访问__proto__时会发生这种情况:该值暂时转换为数字对象(即相当于调用new Number(7))。该对象的原型当然是Number.prototype

The spec says

  

Number原型本身就是一个Number对象;它有一个[[NumberData]]内部插槽,其值为+0。

我只能假设您使用的环境检测到add5(2).__proto__是一个数字对象,并调用其valueOf方法,然后返回0

console.log(Number.prototype.valueOf());