原型与原型链

Object

var o = {name:"a"}
在对象中,会把一些共有属性以隐藏属性__proto__的形式链接到另一个对象,这个公有对象中存储的属性就是所有object拥有的属性,当然这个公有对象也有__proto__属性,但是它指向null。
用consolel.log可以打印出对象o中的所有属性,包括隐藏属性__proto__,它指向Object对象。

image.png

再用console.log打印出Object对象,里面的属性就是对象的共有属性,每个对象都可以调用这些属性。
image.png

Number

var n = new Number(1)
与Object不同的是,Number()是一种函数,虽然函数也是一中对象,但是它的__proto__属性不是直接指向Object的,而是先指向Number对象

image.png

打印Number,Number中也有__proto__,此时的__proto__指向的才是Object。
image.png

公式

var 对象 = new 函数()
对象.proto === 对象的构造函数.prototype
// 推论

number.__proto__ = Number.prototype


var object = new Object()
object.__proto__ = Object.prototype


var function = new Function()
function.__proto__ = Function.prototype

// 另外,所有函数都是由 Function 构造出来的,所以
Number.__proto__ = Function.prototype // 因为 Number 是函数,是 Function 的实例
Object.__proto__ = Function.prototype // 因为 Object 是函数,是 Function 的实例
Function.__proto__ == Function.prototye // 因为 Function 是函数,是 Function 的实例!


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

推荐阅读更多精彩内容