js prototype、constructor、__proto__、new详解
来源:     阅读:613
云上智慧
发布于 2020-04-24 16:38
查看主页

相关名词概念

名词用途形容其余
[[Construct]]对象的一个内置方法,用于创立对象,通过new或者者super关键字调用。该内置方法的第一个参数是传入的参数列表。第二个参数是new所初始化的对象。最后返回一个Obejct。constructor调用实现该内置方法
constructor对象用来创立和初始化一个对象。是个具备prototype属性的function对象。(这个prototype属性保存的是一个指针,指向了prototype对象所在的位置)。通过new创立对象的时候会调用constructor方法,不使用new调用constructor的话,根据具体实现可能会得到不同结果。比方:new Date()得到的是当前日期Date对象,Date()则是当前时间字符串
constructor属性指向constructor对象保存的是引用
prototype属性指向一个prototype对象所在的位置每个函数都有该属性,这个属性中保存的是引用,而不是具体的对象
prototype对象对象的用途是包含可以由特定类型的所有实例共享的属性和方法。该对象的 __proto____属性指向了Object的原型
___proto____实例的属性,指向实例的原型对象保存的也是对象的引用

ecma262/#constructor

function Parent(){  this.name = 'parent';}var a = new Parent();console.log(Parent.prototype);console.log(Parent.constructor);console.log(Parent.prototype.constructor);console.log(a.prototype);console.log(a.__proto__);console.log(a.constructor);
对象取值
Parent的prototype对象一个具备constructor属性的Object(图:prototype 1-1 )
Parent.prototype属性Parent的prototype对象的引用
Parent.constructor? Function() { [native code] }
Parent.prototype.constructor? Parent(){this.name = 'parent';}
a.prototypeundefined
a.__proto____与Parent.prototype相同
a.constructor? Parent(){this.name = 'parent';}
prototype 1-1 prototypeimg.png

new具体的过程

new Parent() = {    var obj = {};    obj.__proto__ = Parent.prototype; // 此时便建立了obj对象的原型链:    // obj->Parent.prototype->Object.prototype->null    var result = Person.call(obj); // 相当于obj.Person("John")    return typeof result === 'object' ? result : obj; // 假如无返回值或者者返回一个非对象值,则将obj返回作为新对象}

alexzhong22c js-new-happen

Object.getPrototypeOf
var o = new C();
//o是C的实例,所以
Object.getPrototypeOf(o) === C.prototype
Object.getPrototypeOf 返回的是实例对象的原型
由于Object是构造函数
Object.getPrototypeOf(Object) 得到的是// f(){[native code]}
Object.getPrototypeOf( Object ) === Function.prototype; // true
由于把Object看作对象,Object是个函数
所以Object.getPrototypeOf( Object )返回的就是函数对象的原型Function.prototype
Object.prototype是构造出来的对象的原型。

function prototype relationship
Function prototype reference

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 服务器应用
相关推荐
Java语言的动态性-invokedynamic
iconfont的使用
Kotlin的Lambda编程(一)
mysql插入emoji表情报 error code [1366]
iOS用SizeClasses进行不同型号、横竖屏下的不同布局适配(2018.7)
首页
搜索
订单
购物车
我的