原型和原型链

一. 两种声明的区别

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。

这三者的关联就是原型链

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容