js内置对象_JS 原型与原型链
一 . 对象
在JS中,一切都可以当做对象。如下图,n1是数字,n2则为对象
var n1 = 1
var n2 = new Number(1)
二 .prototype
在 JavaScript 中,每当定义一个对象(函数也是对象)时候,对象中都会包含一些预定义的属性。其中每个函数对象都有一个prototype
属性,这个属性指向函数的原型对象。
三 .__proto__
JS 在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__
的内置属性,用于指向创建它的构造函数的原型对象。
对象 object 有一个 __proto__
属性,创建它的构造函数是 Object,构造函数的原型对象是 Object.prototype
所以我们可以得到:
所有对象的 __proto__ = = = 指向其构造器的 prototype
var n2 = new Number(1)
// undefined
n2.__proto__ ===Number.prototype
// true
四.原型链
在以上文字我们已经知道了 对象.__proto__ ===函数.prototype;我们不妨往下延伸一下,因为函数.prototype哈希,所以他也是个对象,所以我们又可以得到
函数.prototype.__proto__===Object.prototype;
var n2 = new Number(1)
// undefined
n2.__proto__ ===Number.prototype
// true
Number.prototype.__proto__===Object.prototype
// true
而且,又因为函数也是个对象所以我们又可以得出
函数.__proto__===Function.prototype
Object.__proto__ === Function.prototype
// true 因为 Function 是 Object 的构造函数
当我们把函数.__proto__===Function.prototype,中的函数看成Function时,
Function.__proto__===Function.prototype
我们就可以发现Function.__proto__ 和 Function.prototype是相互引用的了。
参考链接:
最详尽的 JS 原型与原型链终极详解,没有「可能是」。(一)www.jianshu.com