javascript - 创建对象后更改对象的类型

标签 javascript

出于好奇,并做一个我想做的小实验,是否可以在创建对象后更改对象的类型?

通过改变它的类型,我的意思是让对象响应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/

相关文章:

JavaScript++ 运算符无法正常工作

javascript - Node.js:在express.js 路由中使用Socket.io 将消息发送到特定客户端

javascript - Three.js:无法更改 dat.GUI 中的值

php 没有获取 JSON 对象

javascript - 在不影响其他div位置的情况下放置一个popup div

javascript - Jquery - 如果包含链接 WordPress 将类添加到 <td>

javascript - 根据 HTML 选择值更改选项卡

javascript - 使变量名看起来像有空格(JS)

javascript - 引导验证器成功后页面重定向

javascript - Highstock 如何确定日期