2013-07-13 3 views
0

Я уверен, что это было объяснено где-то, но я никогда не находил это так, здесь я иду:Добавление объектов к объекту в JavaScript

Скажем, у меня есть объект, который содержит функции двигаться, атаковать, защищать , Как добавить их в единичный объект, не добавляя их по одному, или добавляя sub.object: units.commands = commands, а скорее: units = commands OR units.prototype = команды.

Еще один простой пример:

var one = function () { 
     this.a = 1; 
    }; 
    var two = function () { 
     this.z = 1; 
    }; 
    var jee = new one(), 
    jee2 = new two(); 
    jee = jee2; 
    console.log(jee); // Should have z AND a. 
+1

Посмотрите мелкие и глубокие копирования. Более конкретно, в вашем случае, глубокое копирование. – jrd1

+0

то, что вы сейчас делаете, это: (1) загромождение глобальной области с переменной 'jee2'. (2) Переписывание указателя на объект 'one' с указателем на объект' two'. – Sumurai8

+1

Вы хотите наследовать от объекта или добавить функциональность в объект? Вот ответ, который заставит вас идти с наследованием: http://stackoverflow.com/questions/16063394/prototypical-inheritance-writing-up/16063711#16063711 – HMR

ответ

3

Вы могли бы сделать еще одну функцию three, которая принимает значения от двух других, как:

var Three = function(){ 
    one.call(this); 
    two.call(this); 
} 

var three = new Three; //=> Three{a:1, z:1} 

С underscore вы можете даже создавать функции вызова их в целом:

var Three = function(){ 
    _.compose(one, two).call(this); 
} 
+0

+1 Первое решение будет хорошо работать для OP, чтобы объединить один и два. Он не будет копировать прототип одного и двух, но образец кода, предоставленный OP, не использовал прототип. – HMR

0

Вы должны перебрать каждого свойства одного объекта и скопировать их один за одним на другой объект.

1

Что вы ищете, это как наследовать свойства одного объекта на другом. Это не делается, просто переписывая указатель одного объекта на другой. Думаю, this page может вам помочь.

+0

Возможно, у меня была какая-то проблема, поскольку прототипы - это для меня это сложная концепция, но в этом случае они тоже не помогают. Можно добавить несколько прототипов к одному объекту. т.е.: один .__ proto__ = два; один .__ proto__ = три; ? На самом деле я думаю, что можно просто подумать, что я пытаюсь добиться множественного наследования. Поэтому установка прототипа более одного раза. Почти каждый пример в javascript всегда использует «под-объект» для добавления функциональности/переменной для объекта ie: «one.something = something» и никогда «one + = something», «one = something» и т. Д. – Hachi

1

Глядя комментарии вы могли бы сделать несколькими способами.

  1. Объединение объектов (извините за использование JQuery здесь, но клонировать объект не так просто и требует всего много кода), чтобы объединить объекты, которые вы можете использовать $.extend
  2. Наследовать от объекта, если вы планирование объекта два для его расширения см. here
  3. Функционирование инъекции в объекте. На данный момент у вас нет образца кода.
Смежные вопросы