2012-11-22 31 views
2

這裏是我JS的簡化版本:JavaScript中,「這個」參考,呼籲從錨標記物功能時

var myObject = function() { 
    return { 
     functionOne: function() { 
      //some other logic here 
     }, 
     functionTwo: function() { 
      var self = this; 
      //some logic here 
      //then call functionOne 
      self.functionOne(); 
     } 
    }; 
} 

然後,我有這個在我的HTML的身體:

<a href="#" onclick="myObject.functionTwo()">click me</a> 

爲什麼我得到錯誤未捕獲TypeError:對象[某些網址]沒有方法'functionOne',當我點擊鏈接?

+0

*「有沒有方法‘functionOne’」 *?你確定?你正試圖調用'functionTwo',這會失敗。 –

+0

我有一種感覺,你有'();'在你的任務結束時,並且你正試圖傳遞'self.functionOne'到某個地方被調用。 –

回答

1

你看到的錯誤並不反映你已經顯示的示例代碼。

這就是說,在你使用的代碼的方式,你應該能夠減少它簡單地說:

var myObject = { 
    functionOne: function() { 
    }, 
    functionTwo: function() { 
     this.functionOne(); 
    } 
} 
+0

'myObject'不需要作爲構造函數調用。它只需要被調用。 –

+0

@ user1689607但是,如果你只是調用它,'this'將會引用'window',這使得更少的意義:) –

+0

但'myObject'函數中沒有使用'this'。它只是返回一個有方法的普通對象。這些方法具有'this',如果它們是從該對象調用的,則它將是對普通對象的引用。所以'myObject()。functionTwo()'會起作用。 –

1

myObject功能需要被爲了得到該對象

<a href="#" onclick="myObject().functionTwo()">click me</a> 
稱爲

爲什麼不直接定義myObject作爲一個對象:

var myObject = { 
    functionOne: function() { 
     //some other logic here 
    }, 
    functionTwo: function() { 
     var self = this; 
     //some logic here 
     //then call functionOne 
     self.functionOne(); 
    } 
}; 
0

你需要什麼是爲了讓你的函數立即執行。除此之外,您對self變量的貶低使我認爲您正在嘗試創建閉包,以便您可以從functionTwo訪問functionOne。如果是這種情況,那麼我認爲以下是你之後的:

var myObject = (function() { 

    function func1() { 
    } 

    function func2() { 
     func1(); 
    } 
    return { 
     functionOne: func1, 
     functionTwo: func2 
    }; 
}());