Я пытаюсь использовать атрибут функции во вложенной функции, но я не знаю, как, не передавая родительскую функцию.Наследование атрибута вложенной функции Javascript
пример:
function foo() {
this.baz = 'baz'
this.bar = new bar()
}
function bar() {
this.bla = 'bla'
}
bar.prototype.func = function() {
console.log(...) // this should return 'baz' (attr baz of foo())
}
До сих пор я судимое это:
function foo() {
this.baz = 'baz'
this.bar = new bar(this)
}
function bar(foo) {
this.bla = 'bla'
this.foo = foo
}
bar.prototype.func = function() {
console.log(this.foo.baz)
}
Есть хороший шаблон для достижения этой цели? так как мой обходной беспорядок
EDIT:
Поскольку некоторые из вас хотели больше RealLife exapmle:
function Game() {
this.world = {
x: 200,
y: 300
}
this.players = {
one: new Player()
two: new Player()
}
}
function Player() {
this.size = {x:1,y:2}
this.position = {
x: world.x - this.size.x, // i need to access games world attribute
y: 0
}
}
Но это не единственный атрибут класса игры мне нужно в класс игрока ..
Это похоже на половину вопроса о том, как работает область обзора JavaScript, и половина вопроса о том, как работает наследование. Возможно, если вы дадите более реальный пример, мы могли бы сделать лучшие предложения для * хорошего * способа сделать то, что вы пытаетесь сделать. В настоящее время мой ответ будет «просто передать ссылку' foo' на 'bar'. – brianvaughn
В вашем примере« bar »не наследуется от' foo'. На «bar» нет прототипа атрибута, который может получить доступ Свойства 'foo'. То, что вы делаете в первом примере, может быть рассчитано на * зависимую инъекцию *, но не наследование вообще. Что касается второго примера, то также нет наследования, но вы используете' bar' as декоратор 'foo', так что вы можете сделать' this.foo.baz'. Это совершенно верно для этой реализации декоратора. – amenadiel
Я с @brianvaughn - текущий кажется прекрасным, однако это может быть не в зависимости на реальную потребность, и может быть, действительно, лучший способ. – vlaz