出于好奇,并做一个我想做的小实验,是否可以在创建对象后更改对象的类型?
通过改变它的类型,我的意思是让对象响应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
我想我可以使用 new MyConstructor() 创建一个新对象,然后删除其中的每个属性,然后从 myInstance 复制每个属性,但想知道是否存在更简单的方法...
--更新--
我确实知道 __proto__
的存在属性,我只是预先丢弃了它,因为我知道该事件虽然在大多数浏览器中实现,但并不是标准的一部分。
最佳答案
由于 JavaScript 是原型(prototype)基础语言,因此 instanceof
方法会检查对象的 __proto__
属性。
所以我猜你的问题是我可以更改创建对象的原型(prototype)吗?
在某些情况下可以,但这是一个坏主意。
在这里查看答案:How to set the prototype of a JavaScript object that has already been instantiated?
Here我猜你正在尝试做的一个例子。 它适用于 Chrome、Safari、Firefox 和 Node.js。
关于javascript - 创建对象后更改对象的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17100988/