2015-04-29 3 views
0

Скажем, у меня есть объект FooИз элемента массива объекта, как я могу получить доступ к свойствам/методам объекта. Js

var Foo = function() { 
    var array = []; 
    var method = function() {return true;}; 
}; 

И Foo.array будет содержать другой объект:

var Bar = function() { 
    var method = function() {/*Perform Foo.method() here */ }; 
}; 

Так вар foo.array = [новый бар()];

Как я могу получить доступ к объекту foo из элемента массива экземпляра бара.

+1

Вы не можете. В Javascript свойства объекта ничего не знают о родителях. –

+0

вам нужно передать 'foo' как параметр' Bar() ', проверить мой ответ –

ответ

1

это неверно:

var foo.array = [new Bar()]; 

вам нужно сделать, это:

var foo = new Foo(); 

, а затем вы можете сделать это:

foo.array = [new Bar(foo)]; 

но вы должны изменить свой бар class поэтому вы можете сохранить ссылку на foo, скажем примерно так:

var Bar = function(foo) { 
    // here you will save an object reference 
    // that will be accesible for all function scope 
    var _foo = foo; 

    var method = function() { 
    _foo.method(); // an example calling 
    }; 
}; 

и то теперь вы можете получить доступ к foo переменной внутри Bar класса и делать все, что вам нужно с ним. Но ваш Foo.method() и Foo.array не видно, что вам нужно сделать их достоянием общественности:

var Foo = function() { 
    this.array = []; 
    this.method = function() {return true;}; 
}; 
+0

Будет ли это считать хорошей практикой? – user2800382

+0

короткий ответ: да. Зачем? я не могу думать о месте, где говорится, что вы не можете хранить ссылку «объект» внутри другого «объекта». –

+0

Спасибо за предложение. Я думаю, что все будет хорошо. Я не знаю, знакомы ли вы с Ember JS, но ваше предложение похоже на то, как их модели используют object.belongsTo ('parentObject') или object.hasMany ('childrenObjects') – user2800382

0

Я думаю, что перестановка вещей, поэтому более ориентированная на объект поможет вам обойти это. Прямо сейчас, Foo выглядит как функция вместо фактического объекта. Поместите его внутри объекта, а затем, получив Foo, верните этот объект, чтобы получить к нему доступ. См. Ниже:

function foo() { 
    var obj = { 
     array: function() { 
      var array = []; 
      return array; 
     } 
    }; 
    return obj; 
} 

var bar = function() { 
    var method = function() { 
    foo().array(); 
    }; 
} 

Возможно, вам стоит рассмотреть возможность передачи параметра arrayContents, например, в метод массива.