function makeAdder(x) {
return function(y) {
return x + y;
};
}
var add5 = makeAdder(5);
add5(2); //7;
add5(2).__proto__; //0`
这很有道理。但是,add5(2)是对象吗?为什么有0?
答案 0 :(得分:2)
我不知道您运行代码的环境,但是当您尝试在数字值上访问__proto__
时会发生这种情况:该值暂时转换为数字对象(即相当于调用new Number(7)
)。该对象的原型当然是Number.prototype
。
Number原型本身就是一个Number对象;它有一个[[NumberData]]内部插槽,其值为+0。
我只能假设您使用的环境检测到add5(2).__proto__
是一个数字对象,并调用其valueOf
方法,然后返回0
:
console.log(Number.prototype.valueOf());