Передача 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, время: 01:58. |