[英]Create a reference to a method with parameters that uses the same scope - in Javascript
我有一些方法( methA
, methB
...),需要在Javascript中調用相同的方法methMain
。 然后,此方法methMain
需要獲取一些數據,並在完成后對調用該方法的方法(methA或MethB ...)進行回調。
我可以使用此處編寫的內容成功創建方法的指針/引用: 如何通過參數傳遞對函數的引用?
該解決方案以及我所看到的所有其他解決方案似乎在當前范圍內不起作用。 此代碼將不起作用:
function TestStructure() {
this.gotData = false;
//define functions
this.methA = function (parA) { };
this.methB = function (parb) { };
this.createFunctionPointer = function (func) { };
this.createFunctionPointer = function (func /*, 0..n args */) {
var args = Array.prototype.slice.call(arguments, 1);
return function () {
var allArguments = args.concat(Array.prototype.slice.call(arguments));
return func.apply(this, allArguments);
};
};
this.methA = function (parA) {
alert('gotData: ' + this.gotData + ', parA: ' + parA);
if (this.gotData == false) {
var fp = this.createFunctionPointer(this.methA, parA);
this.methMain(fp);
return;
}
//...do stuff with data
}
this.methB = function (parB) {
alert('gotData: ' + this.gotData + ', parB: ' + parB);
if (this.gotData == false) {
var fp = this.createFunctionPointer(this.methB, parB);
this.methMain(fp);
return;
}
//...do stuff with data
}
this.methMain = function (func) {
//...get some data with ajax
this.gotData = true;
//callback to function passed in as parameter
func();
}
}
var t = new TestStructure();
t.methA('test');
當methMain
做一個回調FUNC( methA
或methB
)變量this.gotData
將不會被設置。
是否有解決此問題的方法,或者我需要重新考慮設計? 我想這樣做以獲得ajax的數據而不會被async阻塞:false。
我不確定100%,但是我認為您可以通過解決問題來解決
this.createFunctionPointer = function (func /*, 0..n args */) {
var args = Array.prototype.slice.call(arguments, 1);
var that = this; //<<< here
return function () {
var allArguments = args.concat(Array.prototype.slice.call(arguments));
return func.apply(that, allArguments);
//here ^^^
};
};
這將導致你的部分評估功能,與同被稱為this
創建函數指針。 如果要使用其他范圍,只需更改傳遞給.apply
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.