2016-10-19 32 views
0

我有功能A,它定義了另一個函數B。 B作爲argument傳遞給另一功能Chandle event供以後使用。功能B need datafunction A。是否有可能以這種方式傳遞數據?從外部函數傳遞數據在內部函數中供以後使用

function A(B){ 

    var o = [1,2,3]; 


    B = function() { 
     alert(this.blio); // data from A blio is undefined 
    }; 

    B.blio = o; //bind data in property to B 

    $('selector').C({ result: B}); //handle event 
} 
+0

當您嘗試時,是什麼行爲? –

+0

在函數B中,this.blio是未定義的。 – TheChampp

+0

調用「B()」的代碼是什麼? –

回答

0

通過以這種方式分配B作爲函數,您聲明它實質上是一個新類的構造函數。 B.blio不是該對象的屬性,而是該類的靜態屬性,因此無法使用this進行引用。

相反,您應該在B類的原型上創建一個函數,該函數將訪問實例化對象上的存儲值。例如見以下:

var o = [1,2,3]; 

var B = function() { 
    console.log("constructor called"); 
}; 

B.prototype.func = function() { 
    console.log(this.blio); 
} 

function A(){ 
    var b = new B();//instantiate new object 
    b.blio = o;//assign property to object 
    b.func();//call prototype function 
} 
0

您覆蓋參數B過去了分配

B = function() { 
    alert(this.blio); // data from A 
}; 

,然後試圖通過分配屬性(如一個對象)再次重寫參數B起作用的,以功能

B.blio = o; 

你應該試試這個:

function A(B){ 

    var o = [1,2,3]; 

    B.myfunc=function() 
    { 
     alert(this.blio); 
    }; 
    B.blio = o; //bind data in property to B 

$('selector').C({ result: B.myfunc()}); //handle event 

}

0

讓我們來談談這裏涉及到的範圍的一些事情。

function alpha(beta) { 
    this.foo = 42; 
    console.log('From inside alpha:', this.foo); 

    var beta = function() { 
     console.log('Form inside beta:', this.foo); 
    }; 

    beta(); 
} 

alpha(); 

當你執行功能的α,實際上是全球窗口對象。

如果您在控制檯中運行下面的代碼,你會看到阿爾法功能剛剛添加的FOO屬性窗口並將其設置爲42

console.log(window.foo); 

在閱讀您的評論代碼您正在處理一個事件,並且可以從您用作數據存儲庫的某個東西獲取所需的當前值,此處的關鍵是確保您可以訪問所需值的範圍。

發佈更具體的代碼也會對hel有幫助你會得到更好的答案。所有嵌套函數的作用尚不清楚。