javascript - 是否可以更改 JavaScript 对象的内部 [[Class]] 属性?

标签 javascript

假设我已经创建了一个函数构造函数,例如

    function Bar(){
    }
    var obj = new Bar();

是否可以让 Object.prototype.toString.call(obj) 返回类似 [object Date] 的内容?

最佳答案

ECMAScript5不提供任何修改 [[Class]] 的方法:

This specification defines no ECMAScript language operators or built-in functions that permit a program to modify an object’s [[Class]] or [[Prototype]] internal properties or to change the value of [[Extensible]] from false to true. Implementation specific extensions that modify [[Class]], [[Prototype]] or [[Extensible]] must not violate the invariants defined in the preceding paragraph.

ECMAScript6 删除了 [[Class]] 内部插槽,但您可以使用 @@toStringTag Well-Known Symbol :

  • Specification Name
    @@toStringTag
  • [[Description]]
    "Symbol.toStringTag"
  • Value and Purpose
    A String valued property that is used in the creation of the default string description of an object. Accessed by the built-in method Object.prototype.toString.
Bar.prototype[Symbol.toStringTag] = 'Date';
Object.prototype.toString.call(new Bar()); // "[object Date]"

关于javascript - 是否可以更改 JavaScript 对象的内部 [[Class]] 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35900557/

相关文章:

javascript - 使用 javascript/jquery 从 json 变量获取 json 字符串名称

javascript - 是否可以在 Java6 1.6 脚本引擎中从 JavaScript 调用 Java 方法?

javascript - 更好地处理 ajax 调用的附加层

javascript - 更改外壳上的键盘类型

javascript - 无法跟踪输入值的变化

javascript init 未启动

javascript - 使用 jQuery 追加为兄弟元素而不是子元素

javascript - 如何安全地(通过适当的身份验证)与客户端上的第 3 方 api 通信?

javascript - 计算 JavaScript 花费的时间

javascript - 在 Django 表单中使用 .submit(function) 时出现 "Forbidden 403 - CSRF verification failed"