javascript - 简单的 javascript 'new' 关键字

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

最佳答案

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

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

myobject.isPrototypeOf(newmyobject) // true

现在 newmyobject 将从 myobject 继承 subsum,以及 mult将是自己的属性(property)。

new 用于构造函数,例如:

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

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

obj instanceof MyObject // true

关于javascript - 简单的 javascript 'new' 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29226618/

相关文章:

javascript - 移动到普通网站重定向

javascript - HTML5 自动对焦在 Firefox 中不起作用

javascript - 在 JavaScript 中,如果我分配给一个有 getter 但没有 setter 的对象属性会发生什么?

Javascript Lookup table vs else if 和多个匹配结果

javascript - 从 JSON 中获取 Javascript 中不同键的多个集合

javascript - 如何将对象中的id更改为值

c++ - 为什么我们能够访问类中未分配的内存?

c++ - 为多线程环境包装 c++ new/delete 的安全/好方法

javascript - 使用 new 关键字的函数原型(prototype)继承

javascript - Jasmine :这是 returnValue 和 callFake 之间的唯一区别吗?