创建对象后更改对象的类型
Change the type of an object after it has been created
只是出于好奇,并做一个小实验,我有一个想法,是有可能改变一个对象的类型后,它被创建?
通过改变它的类型,我的意思是使对象响应instanceof操作符,像这样:(正如你所看到的,我试图改变构造函数,但它不起作用)
var MyConstructor = function() { this.name = 'no name' };
undefined
var myInstance = { name: 'some name' }
undefined
myInstance instanceof Object
true
myInstance instanceof MyConstructor
false
myInstance.constructor
function Object() { [native code] }
myInstance.constructor = MyConstructor
function () { this.name = 'no name' }
myInstance instanceof Object
true
myInstance instanceof MyConstructor
false
我想我可以用新的MyConstructor()创建一个新对象,然后删除它的每个属性,然后从myInstance复制每个属性,但想知道是否存在更简单的方法…
——
我确实知道__proto__
属性的存在,我只是把它丢弃了,因为我知道事件虽然它在大多数浏览器中实现,但不是标准的一部分。
由于JavaScript是一种原型基语言,instanceof
方法检查对象的__proto__
属性。
所以我猜你的问题是我可以改变创建对象的原型吗?
在某些情况下可以,但这是一个坏主意。
检查这里的答案:如何设置一个JavaScript对象的原型,已经被实例化?
这是一个我猜你正在尝试做的例子。它适用于Chrome, Safari, Firefox和node.js。
myInstance.__proto__ = new MyConstructor()
myInstance instanceof MyConstructor
true
然而,这是不标准的,不是一个好主意https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof
在一些浏览器中,对象的原型是通过__proto__
属性暴露的,但使用它是不明智的——它不能依赖,也不是官方规范的一部分。
因此,你基本上应该接受这样一个事实:你不能在对象创建后改变它的类型,或者打乱它的原型链。
相关文章:
- 将单独的数组深层键转换为所需的类型(数组或对象)
- FilterHeader不适用于模型字段类型对象
- 如何在挖空 JS 中填充嵌套字典类型对象
- 三个中是否有容器类型对象.js来转换一组子对象
- 在带有句柄的迭代函数(每个)中传递参数类型对象
- 如何在TypeScript中从匿名对象轻松创建强类型对象
- 如何从json对象中提取数据,json对象包含具有不同类型对象的映射
- Javascript类型对象的序列化
- Javascript将一个正则表达式字符串转换为一个类型对象
- 一个javascript对象可以有一个属性是另一种类型对象的集合吗?
- 没有机会让一个强类型对象被mobx观察到
- javascript中的值类型引用类型对象
- 未捕获的不变量冲突:期望onClick侦听器是一个函数,而不是类型对象
- 在实例化后更新所有相同类型对象的属性
- JavaScript引用类型对象和普通对象的区别
- static"的正确结构Javascript中的类型对象
- 如何从具有不同类型对象的数组中仅获取汽车对象
- Parse:指针指向具有给定ID的另一类型对象的对象数
- 类类型对象未在node.js中跨模块返回值
- JQuery中[Model]类型对象的访问属性