2013-04-02 53 views
1

我只寫了一個測試html文件,以瞭解javascript中的對象。該代碼是作爲腳本標籤如下如何在一個函數中聲明一個全局變量賦值並在javascript的另一個函數中使用

<script type="text/javascript"> 

    var obj = new ParentFn(); 
    var obj2 = new AnotherParentFn(); 
    var temp; 
    function initer() 
    { 
     temp = obj.Adding(); 
     obj2.caller(); 
    } 
    function ParentFn() 
    { 
     this.a = 10; 
     this.b = 20; 
    } 
    function AnotherParentFn() 
    { 
     this.a = 30; 
     this.b = 50; 
    } 
    AnotherParentFn.prototype.caller = function() 
    { 
     var self = this; 
     temp(); 
    } 
    ParentFn.prototype.Adding = function() 
    { 
     var self = this; 
     document.getElementById("id_div1").innerHTML = " Method Called and Result of a+b is " + (self.a + self.b);   
    } 

</script> 

在身體我使用

<button onclick="initer()"> Click here to test </button> 
<div id="id_div1"></div> 

問題是,當AnotherParentFn.prototype.caller從initer()函數臨時變量稱爲仍然是不確定的。代碼有什麼問題?

我的任務是在全局變量中分配函數ParentFn.prototype.Adding並從AnotherParentFn.prototype.caller函數調用全局變量。如何實現它?

+0

您的臨時變量已經是全球現在 –

+0

如果您可以接受任何答案,那將會很棒。 – hifier

回答

0

括號用於執行功能。 當您將值賦給temp時,您正在調用該函數並將結果(undefined)指定爲temp。要在temp中存儲對該功能的引用,請省略括號。

temp = obj.Adding; 
0

通過編寫temp = obj.Adding();它存儲返回值。在temp中沒有函數指針。使用此

function initer() 
{ 
    temp = obj.Adding; 
    obj2.caller(); 
} 
0

首先,以obj.Adding基準沒有被分配正確;它應該是這個(沒有括號):

function initer() 
{ 
    temp = obj.Adding; 
    obj2.caller(); 
} 

然後,裏面AnotherParentFn.prototype.caller本身,你必須明確地調用期間使用.call()傳遞當前對象this

AnotherParentFn.prototype.caller = function() 
{ 
    temp.call(this); 
} 
1

你不需要將其保存爲全局變量。它已保存在ParentFn.prototype。所有你需要做的就是用.call調用它並傳入你想要的接收器。您可以實現AnotherParentFn.prototype.caller這樣的:

AnotherParentFn.prototype.caller = function() 
{ 
    ParentFn.prototype.Adding.call(this); 
} 

這樣你就可以完全擺脫的temp。您無需將this分配給當地的任何地方var self

相關問題