我创建了简单的对象
var myobject={
sum:function(){
console.log('sum')
},
sub:function(){
console.log('sub')
}
}
然后我从上面的对象创建了新对象,如: -
var newmyobject=new Object(myobject);
最后,我向新对象添加了一个属性,如: -
newmyobject.mult=function(){
console.log('multi');
}
现在的问题是,当我做
时console.log(myobject);
console.log(newmyobject);
两者都显示相同的结果。我期待“mult()”应该只在newmyobject中。
答案 0 :(得分:5)
new Object(obj)
没有创建副本,它只返回obj
作为对象,它已经是一个对象。你可以这样做:
var newmyobject = Object.create(myobject)
newmyobject.mult = function() {
console.log('multi');
}
myobject.isPrototypeOf(newmyobject) // true
现在newmyobject
将从sub
继承sum
和myobject
,而mult
将是自己的财产。
new
的用途是用于构造函数,例如:
function MyObject() {}
MyObject.prototype.sum = function(){}
MyObject.prototype.sub = function(){}
var obj = new MyObject
obj.mult = function(){}
obj instanceof MyObject // true