Object.prototype.__proto__:
实体对象指向造它的构造函数的 prototype属性所指 的对象 ,实例的__proto__是引用构造函数的prototype属性所指对象,
Object.prototype :
js规定,构造函数有prototype 属性,指向一个对象,这个对象一般就是构造函数的公有成员。
所以 __proto__ 和 prototype 可以指向同一个对象 {key1:value1,key2:value2,......},构造函数的私有和特权函数会被带到每个实例函数中,每个实例都会包含相同的私有和特权特权成员的副本,因而实例越多越占内存,实例是在栈中的,构造函数在堆中,因为构造函数都是实例的引用。
Object.prototype.constructor:
返回一个指向创建了该对象原型的函数引用,返回的是函数本身,不是包含函数名称的字符串;依赖一个对象的 constructor 属性并不安全,因为其可以被赋值,从而改变指向,然后丢失方法。此处略。。。。
(ECMAScript 2015 (6th Edition, ECMA-262)Object.prototype.constructor)
以下举例谁说明:
//构造函数 var Mother=function(){}; //new一个实例 var aSon=new Mother(); //此时aSon继承了Mother里面的prototype属性所指向的代码,引用此代码,aSon.__proto__=Mother.prototype;都相等了,所以指向的是同一个对象
1、Object.prototype.constructor :function(){}
2、Object.prototype :{...}
3、Object.prototype.__proto__ :{...} //Object.prototype就是实例 是全被继承的
一、var aSon={}; //初始化一个对象
二、aSon.__proto__=Mother.prototype; //把Mother.prototype的指向赋值给aSon.__proto__ ,然后两个都指向了一个对象{...}
三、aSon.apply(this); //构造函数Mother把指针指向aSon对象