简单的javascript'new'关键字

squ*_*oid 3 javascript object new-operator

我创建了简单的对象

var myobject={

  sum:function(){
    console.log('sum')
  },
  sub:function(){
    console.log('sub')
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我从上面的对象创建了新对象,如: -

var newmyobject=new Object(myobject);
Run Code Online (Sandbox Code Playgroud)

最后我向新对象添加了一个属性,如: -

newmyobject.mult=function(){
  console.log('multi');
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是,当我这样做

console.log(myobject);
console.log(newmyobject);
Run Code Online (Sandbox Code Playgroud)

两者都显示相同的结果.我期待"mult()"应该只在newmyobject中.

elc*_*nrs 5

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

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

myobject.isPrototypeOf(newmyobject) // true
Run Code Online (Sandbox Code Playgroud)

现在,newmyobject将继承subsummyobject,和mult将是自己的财产.

对于使用new是构造函数,例如:

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

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

obj instanceof MyObject // true
Run Code Online (Sandbox Code Playgroud)