.fn
içinde bob(n)
arayarak yeniden üreten bir JSfiddle, öyle (bir tarayıcıda window
) global context
içinde denir. Şimdi, daha önce oluşturduğunuz test
işlevinize temel olarak window.test = n;
ayarlıyorsunuz. Biz bu daha açık yazarsan
, bu daha belirgin hale gelir:
this.fn = function (n) {
bob.call(this,n);
console.log(this.test);
};
: Örneğin
.call()
kullanarak, açık bir bağlam
bob()
arayarak
// in the global scope, `test` gets written to the `global object`
// window.test = new Test(5);
var test = new Test(5);
test.fn(1); // returns 5
test.fn(2); // returns TypeError: 'undefined' is not a function
yapabilirsiniz "geçici çözüm" bu konu
Burada kötülüğün kökü, çalışma zamanı sırasında this
değerinin dinamik olarak atanmasıdır. Beni yanlış anlamayın, aslında ECMAscript'in harika bir özelliği - bu sadece sizin için sorun. Bir işlevi çağırdığınızda, "sadece bu gibi", this
her zaman genel nesneyi başvuruyor.
Her ikisi de benim için '5' yazıyor: http://jsfiddle.net/jEgLM/ –
P.S. Muhtemelen bob.call (bu, n) 'yi istiyorsun. –
jsbin.com'u deneyin – scusyxx