gpt4 book ai didi

javascript - [[Prototype]] vs prototype : . .有什么区别? (MyCons.__proto__ === MyCons.prototype) 等于 FALSE

转载 作者:数据小太阳 更新时间:2023-10-29 05:04:37 32 4
gpt4 key购买 nike

这里好像有区别...

假设我们有 function MyConstructor() {}

MyConstructor 的[[Prototype]]Function.prototype不是 MyConstructor.prototype.

换句话说(非标准/“console.log-able”)的话:
MyConstructor.__ proto__ 不是 MyConstructor 的MyConstructor.prototype

试试这个:

function MyConstructor() {};
(MyConstructor.__proto__ === MyConstructor.prototype); //false?! why?

为什么会这样?谁能给我解释一下区别

最佳答案

可以这样想。 MyConstructor是一个函数对象,所以它是由Function创建的;因此它的 [[Prototype]](或 __proto__)与 Function.prototype 相同。

以同样的方式,var myObj = new MyConstructor() 创建一个对象myObj,其[[Prototype]]MyConstructor.prototype.

换句话说,函数有一个 prototype 属性,当你用 new 调用函数时,它们将构造一个具有 [[Prototype ]] 与构造函数的 prototype 属性相同...但是函数的 prototype 属性与其 [[Prototype]] 不同(或 __proto__)属性,因为函数遵循与其他对象相同的规则,并从构造它的函数中获取其内部 [[Prototype]] 属性(顺便说一下,它始终是 Function)。


进一步解释,[[Prototype]]prototype 有完全不同的目的。 [[Prototype]] 用于解析对象的属性。如果对象没有属性,则检查其 [[Prototype]],然后检查该对象的 [[Prototype]],依此类推,直到找到属性或您到达了原型(prototype)链的末尾。

相比之下,prototype 是您将[[Prototype]] 属性分配给对象的机制,因为除了使用非-标准 __proto__ 属性。

因为函数是对象,所以它们有一个[[Prototype]] 内部属性,用于像普通对象一样解析属性,还有一个prototype 属性,它是指定为函数构造的新对象的 [[Prototype]]

关于javascript - [[Prototype]] vs prototype : . .有什么区别? (MyCons.__proto__ === MyCons.prototype) 等于 FALSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9451881/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com