У меня есть следующие:Как я могу ссылаться на объект внутри одной из его функций-членов?
var o = {f: function(fn) {
fn.call(o);
}};
var ob = {f: function() {
o.f(function() {
this.x = 2; //HERE: how can this reference ob?
//ob.x = 2;
});
}};
ob.f();
ob.x; // undefined
o.f(fn)
вызовов fn
где this
обязан о.
ЗДЕСЬ Я хочу использовать this
для доступа к ob. Однако, когда вызывается ob.f
, this
привязан к o
. JQuery работает, как это, я думаю. Например:
$(...).blah(function() {
this // this is bound to $(...) jquery object.
...
};
Что я делаю сейчас:
var Ob = function() {
var self = this;
self.f = function() {
o.f(function() { self.x = 2; };
};
};
var ob = new Ob();
ob.f();
ob.x; // 2
Но мне не нравится выше по стилистическим причинам:
- Используя оператор
new
звучит слишком классический ООП. - Определение
class Ob
с использованиемfunction
не является интуитивным (по крайней мере, в начале).
Именно поэтому я пытаюсь определить ob
с объектным литералом. Но я не могу найти способ ссылаться на объект ob
на функцию , которая использует метод call, который устанавливает this
другому объекту, кроме ob
.
я могу сделать что-то вроде следующего:
var ob = {f: function() {
o.f(function() {
self.x = 2;
});
}};
var self = ob;
ob.f();
ob.x;
Но я не знаю, как фактор выше. Я пробовал:
function obj(o) {
return function() {
var self = o;
return o;
}();
}
var ob = obj({f: function() {
o.f(function() {
self.x = 2;
});
}});
ob.f();
ob.x;// ReferenceError: self is not defined
Итак, есть ли способ для ссылки на объект в функции внутри объекта надежно (this
может, обязан что-либо в зависимости от контекста)?
awesome! просто то, что я хотел! – numeric
«Я» уже является глобальной переменной, например «undefined» и «NaN». Пожалуйста, используйте другое имя, чтобы сделать его менее запутанным. – some