gpt4 book ai didi

javascript - 是否可以更改标准 JavaScript 对象的类型

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

那么是否可以将一个(Array,Date,....)转换成不同的类型?我们以数组为例:

var arr = [];
arr.__proto__ = NodeList.prototype;
arr instanceof Array // is now false

但如果我这样做:目录(arr);//数组[0]

所以它在技术上仍然是一个 Array 而不是一个实例?

我如何将其更改为不同的类型。

另一个例子:

var str = new String('hi'); // I used new String to return mutable object
var str.__proto__ = Array.protoype;
dir(str); // String[2]

那么技术上仍然是 String

我该如何将其更改为另一种类型(甚至可能)?

最佳答案

这是一个理论,因为我不知道 console.dir 函数背后的内部工作原理(无论如何都是依赖于浏览器的),但我的猜测是 console.dir 显示 String[2] 而不是 Array[2] 因为 internal [[Class]] propertyString。您可以使用 Object.prototype.toString function 进行测试:

var x = new String("hi");
x.__proto__ = Array.prototype;
x instanceof Array // true
Object.prototype.toString.call(x) // "[object String]"

根据 ECMAScript 5 specification, section 8.6.2 回答你关于是否可以更改 JavaScript 对象类型的问题(即,在这个问题的上下文中,内部 [[Class]] 属性) :

NOTE 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.

这意味着没有办法使用规范中给出的标准语言结构来做到这一点,尽管可能有也可能没有一些实现相关的扩展使之成为可能。

关于javascript - 是否可以更改标准 JavaScript 对象的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30429649/

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