2015-03-24 2 views
3

Я создал простой объектПростой JavaScript «новый» ключевое слово

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.

+4

объекты передаются по ссылке. Вам придется клонировать его, чтобы добавить уникальные методы. –

+0

@JayBhatt действительно достойный комментарий, чтобы быть ответом :) –

+0

@ NullPoiиteя Согласен. Но '@ elclanrs' уже дал хороший ответ. –

ответ

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 
+0

Да, но в моем сознании большое сомнение, но зачем использовать «новый», я могу просто использовать var newmyobject = myobject. – squiroid

+0

'new' предназначен для использования с функциями конструктора, см., Помогает ли редактирование. 'newmyobject = myobject' - это тот же самый точный объект, а' Object.create' дает вам новый объект, а другой объект - прототипом. – elclanrs

Смежные вопросы