gpt4 book ai didi

javascript - 在 JavaScript/ActionScript 中重新定义 Math.constructor 是否有任何实际用途?

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

Math 对象没有原型(prototype)属性,但有构造函数属性。是否存在重新定义构造函数有用的情况?

最佳答案

Math 对象(准确地说:ECMAScript 全局对象的 Math 属性的初始值所引用的对象)有一个 constructor 属性,参见 ECMAScript Language Specification, 5.1 Edition ,第 15.8 节“数学对象”。因此,

Math.hasOwnProperty("constructor")

返回 false(在符合 ECMAScript Ed. 3 及更高版本的实现中)。

Math 对象通过原型(prototype)链从其原型(prototype)继承 构造函数 属性,它是“标准内置对象原型(prototype)”object (15.2.4)”(同上),这与最初由 Object.prototype 属性引用的相同。后一个对象提供了几个有用的属性,例如 Object.prototype .hasOwnProperty(见上文)。因此 Math 对象的原型(prototype)链不为空是有道理的。

Math 对象也继承 Object.prototype.constructor 只是 ECMAScript 实现中无条件继承的副作用(除了版本 4 提案,可能还有 future 的版本)属性没有合适的可见性修饰符来防止这种情况发生(如几种基于类的语言中的 private)。当然,继承自同一个原型(prototype)的Object实例的构造函数是全局对象的Object属性的初始值所引用的对象。所以 Object.prototype.constructor 必须反射(reflect)这一点。因此,评估的结果

Math.constructor === Object

为真

关于javascript - 在 JavaScript/ActionScript 中重新定义 Math.constructor 是否有任何实际用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10339334/

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