gpt4 book ai didi

javascript - 构造函数属性 : __proto__. constructor vs prototype.constructor

转载 作者:行者123 更新时间:2023-11-30 11:08:21 28 4
gpt4 key购买 nike

我是 Javascript 的新手,我正在尝试深入挖掘并理解继承、构造函数和原型(prototype)链。所以,我创建了一个构造函数,

var a = function(){this.integer=1,this.float=1.0,this.string="one"}

现在,这个函数有一个 prototype.constructor 属性,一个 constructor 属性和一个 __proto__.constructor 属性。

我理解 __proto__.constructor == 执行的构造函数创建函数 a。此外,prototype.constructor 是当我使用 new 关键字创建“a”实例时执行的函数。

但是我不明白第三个构造函数属性是干什么用的。它等于 __proto__.constructor

此外,b.__proto__.constructor !== Object.prototype.constructor,正如我所想的那样。这是为什么?

最佳答案

a.__proto__Function原型(prototype)(即 Function.prototype )。它是所有函数继承函数特定方法的对象,如 call , apply , bind等。a.__proto__.bind == a.bind 是真的.

a.__proto__.constructorFunction构造函数,即函数 Function . Function原型(prototype)通过 constructor 引用了其关联的构造函数属性,这始终是原型(prototype)对象和构造函数之间的默认关系。 (在接下来的两段中将详细介绍这种“默认关系”。)

完全不同的是a.prototype -- 在 JavaScript 中,任何函数都可以是构造函数,即可以用 new 调用它.每当使用 new 调用函数时, 它创建一个新对象,其 __proto__是函数的 prototype并通过 this 指向新创建的对象.所以在对 new a() 的调用中确实this.__proto__等于 a.prototype .此原型(prototype)对象自动创建并存储在 a.prototype 中目前函数 a已定义。

a.prototype.constructor等于a ,因为创建 prototype 的 JavaScript 内部例程新定义函数的对象(如前一段所述)总是给新原型(prototype)一个 constructor引用新定义函数的属性。要真正了解杂草,相关的 ECMAScript 例程是 19.2.1.1.1, CreateDynamicFunction ,其中指出,“为使用 CreateDynamicFunction 创建的每个函数自动创建一个 prototype 属性,以提供将函数用作构造函数的可能性。”

a没有自己的constructor属性,但它会自动继承 a.__proto__.constructor可访问为 a.constructor ,就像它继承了其原型(prototype)父级上的任何其他属性一样(就像 a.bind 实际上是 a.__proto__.bind 一样)。

最后,a.__proto__.constructor !== Object.prototype.constructor因为Object.prototype不是函数对象的原型(prototype)父代,而是 Function.prototype是。 a.__proto__.constructor === Function.prototype.constructor 确实如此(更简洁地说,a.__proto__ == Function.prototypea.__proto__.constructor == Function)。

关于javascript - 构造函数属性 : __proto__. constructor vs prototype.constructor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54774046/

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