Я новичок в javascript и борется с проблемой ниже.ссылка родительский объект в javascript
Давайте подумаем об этой ситуации.
Во-первых, есть такой объект.
var bar = {
'name' : 'bob',
'comments' : []
}
Однако из-за некоторых причин, у нас есть только одна переменная, с именем «Foo», и это в точности то же самое с bar.comments
.
Во-вторых, поскольку мы должны ссылаться на объект bar
, должен существовать метод в foo
, названный callParent
. Если мы удовлетворим всем этим условиям, мы можем получить объект bar
с использованием foo.callParent()
.
Для реализации, как и прежде, я определяю имя конструктора Custom
.
function Custom(param){
this.callParent = function(){
console.log(param);
}
}
, а затем, чтобы использовать экземпляр Custom
как массив, наследование Array.
Custom.prototype = Array.prototype;
после этого, я хочу определить объект bar
как показано ниже.
var bar = {
'name':'bob',
'comments':new Custom(this)
}
В этой реализации, потому что я думал, что this
означает bar
сам, я ожидал, что результат будет foo.callParent()
bar
но это было window
. Я думаю, это потому, что в контексте звонка foo.callParent()
, this
больше не означает bar
.
И наконец, я решаю эту проблему следующим образом.
var bar = {
'name':'bob',
'comments':undefined,
'init':function(){
this.comments = new Custom(this);
return this;
}
}.init();
Qeustion: Есть ли способ, чтобы решить эту ситуацию, не прибегая к помощи другого метода, как bar.init
? Я хочу решить это только с изменениями конструктора Custom
! Связано ли это с IIFE?
как это? 'var bar = { 'name': 'bob', 'comments': new Custom (bar) }' – Lewis
@tresden, который не будет работать - это пройдет 'undefined'. –
@ DanielA.White О, мой плохой. Это должно было быть похоже на ваш ответ. – Lewis