Object.create()并且
Object.getOwnPropertyDescriptors()是你所需要的。
const obj = JSON.parse(JSON.stringify(d1))const d3 = Object.create(Dog.prototype, Object.getOwnPropertyDescriptors(obj))
此方法与OP方法之间的区别在于,此方法
prototype在原型上设置属性,而OP方法直接在对象上设置属性。当您使用带有
hasOwnProperty()方法的for-
in循环遍历对象自身的属性时,可以看到以下内容:
for (const i in d1) { if (d3.hasOwnProperty(i)) { console.log(i) }}在我的方法中,它仅输出
_name,而在OP的方法中,它也输出
getName。
不幸的是,它
Object.getOwnPropertyDescriptors()是ECMAscript
2017的一部分,目前仅在Firefox中受支持,因此您需要使用Babel。
或者,您可以使用
Object.setPrototypeOf()。它具有比更好的浏览器支持
Object.getOwnPropertyDescriptors(),但是MDN不推荐使用它,因为它速度慢。
const d3 = JSON.parse(JSON.stringify(d1))Object.setPrototypeOf(d3, Dog.prototype)



