Вы должны быть в состоянии добраться туда, возможно, вам придется пройти немного дальше, чем вы ожидали. Попробуйте что-то вроде
Obj = function(i,newFn) {
this.i = i;
if( newFn ) this.fn = newFn;
}
Obj.prototype.fn = function(a) { return a+this.i; }
o1 = new Obj( 3, function(a) { if( a<0 ) return 0; return this.constructor.prototype.fn.apply(this, arguments) } );
В вашем замыкании получите прототип для конструктора, который использовался для создания этого объекта, а затем используйте .apply()
, чтобы вызвать требуемый метод экземпляра, используя this
и аргументы, которые вы передали.
Или, как сказал Питер Олсон, вместо this.constructor.prototype.fn
вы можете использовать Obj.prototype.fn
, но вам все равно нужно либо .call()
, либо .apply()
, чтобы убедиться, что вы выполняете метод в нужной области, в противном случае this
не будет указывать на то, что, как вы думаете, должно.