gpt4 book ai didi

javascript - 对象的Prototype属性,是对象吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:44:52 25 4
gpt4 key购买 nike

我已经阅读了很多关于对象原型(prototype)属性的精彩文章和讨论(例如 this one),但这里有一个大问题。当我们观察“prototype”属性的行为时,我们意识到它实际上是另一个对象。我们可以看到它有自己的 proto 和 constructor 属性,就像一个对象一样。

var myobj= function(){};
myobj.prototype.constructor== myobj --> true

所以这些是问题:

  1. “原型(prototype)”本身是对象吗?
  2. 原型(prototype)和它相关的对象(在本例中为 myobj)之间的关系是什么?
  3. 为什么 myobj.prototype.__proto__ 默认是“Object{ }”,但它的构造函数是 myobj
  4. 我们知道:“__proto__ 是查找链中用于解析方法等的实际对象。prototype 是用于构建__proto__ 当您使用 new 创建对象时。但是我们可以看到,这不仅仅是原型(prototype)所做的。我认为:Prototype 就像一个对象的所有共享方法和属性的容器对象! 然后,当使用 new 创建对象的实例时,它的内部 [ [Prototype]] 指向一个类的共享行为和属性暴露给实例的原型(prototype)!这是真的吗?

最后:好像我们在实例化一个类的时候,实例的构造函数被设置为那个对象原型(prototype)的构造函数。这个结论能成立吗?

var b= new myobj();
b.constructor== myobj.prototype.constructor --> true
b.constructor == myobj --> true
myobj.prototype={};
b.constructor == myobj --> false
b.constructor== Object --> true
myobj.prototype.constructor== Object --> true

最佳答案

  1. 是的,原型(prototype)对象是一个对象。它与函数一起隐式构造。
  2. 我不会称其为“ parent ”。它们唯一的关系是 myobj 函数确实有一个 .prototype 属性,其值是原型(prototype)对象。
  3. 原型(prototype)对象继承自 Object.prototype。它确实有一个自己的 .constructor 属性,其值是 myobj 函数。 ( It's really just a property )
  4. 是的,这是真的。 .__proto__ 是内部 [[Prototype]] 字段的非标准访问器。因此,它们经常被用作同义词。
  5. 不,当您构建一个实例时,没有设置.constructor 属性。所发生的只是新实例继承自原型(prototype)对象,并且原型(prototype)对象具有 constructor 属性。请注意,示例中的 myobj.prototype={}; 对您之前构造的实例没有影响。

关于javascript - 对象的Prototype属性,是对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30714850/

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