一. 两种声明的区别
var n = 1 在内存中是数值
var n = new Number(1) 在内存中是一个对象
二. 原型
每一个对象数据类型天生自带一个属性__proto__,属性值是当前实例所属类的原型(prototype)
对象n本应该没有tostring属性,那么它是如何调用的呢?
原来Number.__proro__指向一块内存,这块内存中Number的共有属性
Number.prototype 指向同一块内存
那么Number.__proro__和Number.prototype有什么区别呢?
prototype 和 __proto__ 的不同点在于prototype 是构造函数的属性,而 __proto__ 是对象的属性
三. 原型链
我们声明一个空数组,然后发现可以调用value.Of属性。那么value.Of属性是哪来的呢?
前面我们知道了Array.__proro__指向一块内存,这块内存中Array的共有属性,然后我们发现其中并没有value.Of属性,继续点开Array.__proro__.__proro__终于发现了value.Of属性。
其实arr.__proto__.__proto__ 就是 window.Object.prototype, arr.valueOf 其实就是 window.Object.prototype.valueOf。
这三者的关联就是原型链