Получение ссылки на объект из метода
Здравствуйте.
Столкнулся с такой ситуацией: от функции к функции передается анонимный объект с большим количеством методов, для более упорядоченной структуры, методы помещены внутрь атрибутов этого объекта, например:
function Test() {
this.str = 'test';
}
Test.prototype = {
fn1: function() {
alert(this.str);
},
fn: {
fn2: function() {
alert('????');
}
}
};
new Test().fn.fn2();
как в этом случае в функции fn2 получить ссылку на родительский объект и добраться до его атрибута str? |
function Test() {
this.str = 'test';
}
Test.prototype = {
fn1: function() {
alert(this.str);
},
fn: {
var self = this;
fn2: function() {
alert(self.str);
}
}
};
new Test().fn.fn2();
|
Kolyaj, там объект, а не функция.
|
Snipe, и правда, не прокатит.
|
так не делать и всё будет ОК
|
Эх, такая была удобная конструкция, видимо придется переделывать :-(
Всеравно как-то не верится, что в JavaScript нет специальных средств типа «this», «constructor» и «arguments.callee», чтобы добраться до«верхнего» родительского объекта. |
Хм, а если делать вот так:
function Test() {
this.str = 'test';
}
Test.prototype = {
fn1: function() {
alert(this.str);
},
fn: {
self: function(obj) {
return obj;
}(this),
fn2: function() {
alert(this.self.str);
}
}
};
new Test().fn.fn2();
Только в self теперь записывается ссылка на window :( |
Лично я использую вложенные объекты, как удобную иерархическую структуру данных. А завязывать как-то функционал ООП на ней неполучается, да и это лишнее, помоему.
|
| Часовой пояс GMT +3, время: 03:07. |