2017-01-26 2 views
0

Моя цель с моим методом - наследовать имя свойства 'c' и добавить его в obj1. Не уверен, что я здесь отсутствует, вместо «c» мой метод наследует имя «key2».Наследование свойств объекта Javascript

var obj1 = { 
 
    a: 1, 
 
    b: 2 
 
}; 
 
var obj2 = { 
 
    b: 4, 
 
    c: 3 
 
}; 
 

 
function extend(obj1, obj2) { 
 
    output = {}; 
 
    for(var key in obj1){ 
 
     for(var key2 in obj2){ 
 
      if(key !== key2){ 
 
       obj1.key2= obj2[key2]; 
 
      } 
 
     } 
 
    } 
 
    return obj1; 
 

 
    
 
} 
 
extend(obj1, obj2)

ответ

0

Когда вы пишете obj1.key2 вы устанавливаете свойство под названием key2.

Вот как работает сокращенная запись JS.

Вы хотите obj1[key2].

Вы также возвращаетесь obj1; не знаю какой output для.

2

Вы строго кодируете Имущество key2. Он должен быть назначен как obj1[key2]. Javascript позволяет динамически добавлять свойство и имя свойства можно определить и во время выполнения. Итак, Obj1[key2] создает динамические свойства.

Кроме того, обратите внимание, что, поскольку вы используете оператор in и никакая дополнительная проверка не выполняется для свойства с использованием метода Object.hasOwnProperty(). В случае объектов с цепочкой Prototype вы можете получить разные результаты, которые вам когда-нибудь могут быть нежелательными.

var obj1 = { 
 
    a: 1, 
 
    b: 2 
 
}; 
 
var obj2 = { 
 
    b: 4, 
 
    c: 3 
 
}; 
 

 
function extend(obj1, obj2) { 
 
    output = {}; 
 
    for(var key in obj1){ 
 
     for(var key2 in obj2){ 
 
      if(key !== key2){ 
 
       obj1[key2]= obj2[key2]; 
 
      } 
 
     } 
 
    } 
 
    return obj1; 
 

 
    
 
} 
 
console.log(extend(obj1, obj2));

0

На линии 15 вы присваивающее имущество на obj1 в .key2 вместо этого вы должны присвоить свойство, как так obj1[key2]. Это будет выполнять задание с ключевым значением, точно так же, как при выполнении ключевых поисков.

Существует также любопытный случай, когда переменная типа output не используется и не определена, в моем примере я удалил ее из кода.

Фиксированный пример:

var obj1 = { 
 
    a: 1, 
 
    b: 2 
 
}; 
 
var obj2 = { 
 
    b: 4, 
 
    c: 3 
 
}; 
 

 
function extend(obj1, obj2) { 
 
    for(var key in obj1){ 
 
     for(var key2 in obj2){ 
 
      if(key !== key2){ 
 
       obj1[key2] = obj2[key2]; 
 
      } 
 
     } 
 
    } 
 
    return obj1; 
 

 
    
 
} 
 
extend(obj1, obj2) 
 

 
console.log(obj1)

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