通常 '這個' 是指向宿主調用的方法的對象。
一個簡單的例子(。您可以與function.call(的thisObject,ARG1,ARG2)或function.apply(的thisObject,[ARGLIST])覆蓋此):
var myObject = {
value: 1,
report: function() {
return "value: " + this.value;
}
}
console.log(myObject.report()); // "value: 1"
應挺清楚的。
使用一個構造函數和原型,這將是:
function Reporter(v) {
this.value = v;
}
Reporter.prototype = {
report: function() { return "value: " + this.value; }
};
var myObject = new Reporter(1);
console.log(myObject.report()); // "value: 1"
作品一樣。 'this'是通過調用「new Reporter(1)」創建的對象,原型中的'this'指的是調用方法「report()」的對象。 (原型來,只有發揮作用,如果沒有法「的報告()」中的「myObject的」定義爲自己的財產。)
現在有點多個嵌套:
function ComplexReporter(v) {
this.value = v;
}
ComplexReporter.prototype = {
report: function() { return "value: " + this.value; },
utils: {
innerReport: function() { return "value: " + this.value; }
}
};
var myObject = new ComplexReporter(1);
console.log(myObject.report()); // "value: 1"
console.log(myObject.utils.innerReport()); // "value: undefined"
第一次調用就像上面一樣,並提供了預期的結果。
在第二次調用中,'this'與'myObject'不同,'myObject.prototype.utils'沒有任何屬性@value。 這實際上是
ComplexReporter.prototype.utils.innerReport.apply(myObject.prototype.utils, []);
因此,作爲一個經驗法則,「這個」是在點表示法調用對象的方法中,當最後的點之前由路徑描述到最後的標識符的實體。
沒有原型的最後一個例子(使它簡單一點再次):
var myComplexObject = {
value: 1,
report: function() {
return "value: " + this.value;
},
utils: {
innerReport: function() {
return "value: " + this.value;
}
}
}
console.log(myComplexObject.report()); // "value: 1"
console.log(myComplexObject.utils.innerReport()); // "value: undefined"
// same as myComplexObject.utils.innerReport.apply(myComplexObject.utils, []);
console.log(myComplexObject.utils.innerReport.apply(myComplexObject, [])); // "value: 1"
而:「這個」總是被判斷的那一刻,被調用的函數(這樣你就可以」在構建閉包時保存'this'的上下文含義)。
我希望,這些例子瞭解如何「這個」工作幫助有點...
PS:如果這個對象提供了一個調用function.call()或function.apply ()是undefined或null,全局對象('self',在與'window'相同的瀏覽器中)被用作'this'。
它取決於 - 什麼是調用回調? –
「對象」對象 – Tomatoes
請張貼一些演示此問題的實際代碼。使用你的僞代碼很難分辨出你有什麼問題,因爲語法是非標準的。 – zzzzBov