简单的javascript' new'关键词

时间:2015-03-24 06:55:45

标签: javascript object new-operator

我创建了简单的对象

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中。

1 个答案:

答案 0 :(得分:5)

new Object(obj)没有创建副本,它只返回obj作为对象,它已经是一个对象。你可以这样做:

var newmyobject = Object.create(myobject)
newmyobject.mult = function() {
  console.log('multi');
}

myobject.isPrototypeOf(newmyobject) // true

现在newmyobject将从sub继承summyobject,而mult将是自己的财产。

new的用途是用于构造函数,例如:

function MyObject() {}
MyObject.prototype.sum = function(){}
MyObject.prototype.sub = function(){}

var obj = new MyObject
obj.mult = function(){}

obj instanceof MyObject // true