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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章

js中.__proto__既然是存在于内置的 Object.prototype 中不存在与对象中为啥console.log能打印出来?

js 最容易理解的原型链 prototype和_proto_

js 最容易理解的原型链 prototype和_proto_

JavaScript对象之对象标签和对象序列化

原型与原型链

原型链