1.所有的对象(Object)都有自己的私有属性proto指向它的原型对象prototype.原型对象也有自己的原型对象,他们通过proto原型链一层一层往上找,直到有一个对象的原型对象为null为止。null没有原型,是这个原型链的终止。
1.1.几乎JavaScript中的所有对象都是原型链顶端的Object对象的实例。
1.2对象的.proto ===构造出该对象的函数的.prototype。
2.JavaScript所有的数据类型都可以用对象的形式表示出来:由于函数是对象,所以我们可以用构造函数的方式使Numeber , Boolean ,String边城对象。下面以Number为例子。
2.1 var n = new Number(); 7.png2.2这里可以看到n有一个 _ proto_指向Number()这个构造函数。这里n是Number的实例,Number是n的原型对象.
2.3Number()也有自己的_ proto _属性,它指向Object()这个构造函数。既Number()为Object()的实例,Object()为Number()的原型对象。
2.4可以看到在Object()的属性中有hasOwnProperty这个属性,再往后就是对象的最终原型对象null了.
8.png
3.可以看出下面的“公式”。
var 对象 = new 函数();
对象.proto = 构造该对象函数的.prototype;
var n = new Number();
我们知道n._ proto _ === Number .prototype,因为Number()为n的构造函数。
那Number._ proto_ 是什么呢?
由于Number()的构造函数为Object()。
故Number._ proto_ === Object.prototype.
同理:
var object = new Object();
object._ proto_ === Object.prototype;
Object._ proto_ === Function.prototype;
var function = new Function();
function ._ proto_ === Function.prototype;
Function._ proto_ === Function.prototype;
网友评论