简单 javascript 'new' 关键字

Simple javascript 'new' keyword

我创建了简单的对象

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

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

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

myobject.isPrototypeOf(newmyobject) // true

现在 newmyobject 将从 myobject 继承 subsum,而 mult 将是自己的 属性.

new 用于构造函数,例如:

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

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

obj instanceof MyObject // true