Я вполне уверен, что это невозможно, но хотел посмотреть, есть ли у кого-нибудь гениальные идеи относительно того, как сделать это возможным.
Я хочу, чтобы следующий код работал:
var x = new foo();
x.a.getThis() === x; // true
Другими словами, я хочу, чтобы x.a.getThis
имел ссылку на this
, являющуюся x
в этом случае. Имеет смысл?
Чтобы заставить это работать один глубокий уровень прост:
function foo(){}
foo.prototype.getThis = function(){ return this; }
var x = new foo();
x.getThis() === x; // true
Во-первых, я хочу, чтобы это работало в качестве прототипа, без "обмана" путем ручной привязки к this
:
function foo(){
this.a = {
getThis : (function(){ return this; }).bind(this)
};
}
Хотя вышеприведенный пример является идеальным функциональным примером того, чего я пытаюсь достичь, я просто не хочу, чтобы все дополнительные функции использовались для каждого экземпляра:)
К вашему сведению, фактический вариант использования здесь заключается в том, что я создаю классы для представления объектов Cassandra в узле, и я хочу иметь возможность ссылаться на супер-столбец -> столбец-семейство -> столбец через foo.a.b
и сохраните ссылку на foo
в глубокой функции.