Передача this при обращение к объекту внутри класса
Хочу сделать что-то похожее на неймспейс в JavaScript. Но столкнулся с проблемой. При вызове функции внутри объекта ей как и положено передаётся в качестве параметра this её родитель. Обойти это можно вызывая функции при помощи метода apply, передавая нужный this. Можно ли сделать как нибудь так что-бы в качестве параметра this всегда передавался нужный объект?
function Foo(){
this.param1="start";
this.param2="stop";
}
Foo.prototype.get = {};
Foo.prototype.get.p1 = function(){
alert(this.param1);
};
var foo = new Foo();
foo.get.p1.apply(foo);
foo.get.p1();
не знаю может есть что-то вроде: foo.get.set_this(foo); |
Если совсем не думать, то: .bind(foo)
|
не совсем понял причём тут .bind()
В итоге мне нужно что-бы всегда при вызове foo.get.p1(); в качестве this передавался родительский объект т.е как при foo.get.p1.apply(foo); но что-бы не приходилось писать apply, и что-бы задавалась это при описании класса а не после создания экземпляра |
function Foo(){
this.param1="start";
this.param2="stop";
this.get.p1=this.get.p1.bind(this)
}
Foo.prototype.get = {};
Foo.prototype.get.p1 = function(){
alert(this.param1);
};
var foo = new Foo();
foo.get.p1.apply(foo);
foo.get.p1();
А вообще да, я нихрена не понимаю зачем оно вам надо, потому тупо отвечаю на конкретный вопрос, без поиска нормального решения. |
Цитата:
|
Maxmaxmахimus,
Спасибо! то что нужно! vadim5june, перед написанием данного поста прочитал как раз эту статью. Но как назначить нужного "родителя" я там не нащёл. "похожее" было ключевым словом |
В итоге получается так:
function Foo(){
this.param1="start";
this.param2="stop";
this.get.__parent__ = this;
}
Foo.prototype.get = {};
Foo.prototype.get.p1 = function(){
alert(this.__parent__.param1);
};
var foo = new Foo();
foo.get.p1();
ещё раз спасибо! |
Цитата:
function Foo(param){
this.param1=param;
this.param2="stop";
this.get.__parent__ = this;
}
Foo.prototype.get = {};
Foo.prototype.get.p1 = function(){
alert(this.__parent__.param1);
};
var foo = new Foo("1");
foo.get.p1();
var foo2=new Foo("2");
foo.get.p1();
|
Вот моё решение:
function Foo(param){
this.param1=param;
this.param2="stop";
}
(function (self) {
Foo.prototype={
_get: {
p1: function(){
alert(self.param1);
}
},
get get() {
self=this;
return this._get;
}
};
})();
var foo = new Foo("1");
foo.get.p1();
var foo2=new Foo("2");
foo.get.p1();
|
oneguy,
Спасибо за пример! А можно это всё как-нибудь проще организовать? я ничего проще этого примера придумать не смог... :( |
| Часовой пояс GMT +3, время: 22:42. |