首页 > 代码库 > Object.prototype.__proto__ 、Object.prototype和 Object.prototype.constructor

Object.prototype.__proto__ 、Object.prototype和 Object.prototype.constructor

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对象
 

 

Object.prototype.__proto__ 、Object.prototype和 Object.prototype.constructor