簡體   English   中英

使用具有相同作用域的參數創建對方法的引用-用Javascript

[英]Create a reference to a method with parameters that uses the same scope - in Javascript

我有一些方法( methAmethB ...),需要在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( methAmethB )變量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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM