2011-07-11 42 views
0

我正在創建一個相當複雜的對象,並希望能夠從外部操縱對象。我想從一個click事件如何從對象外(通過事件)在JavaScript中引用對象方法?

function myObject(){ 
    //How do I reference this function? 
    this.doSomething = function (action){ 
     var doing = action; 
    } 

} 

我明白,我可以引用的方法,如果我創造這樣一個變量裏面的對象引用特權法:

var obj = new myObject(); 
obj.doSomething('hit keyboard'); 

但我創建的鏈接觸發這個事件是由對象創建的,但是放置在對象之外,所以他們不會知道容器變量來引用它。

<a href="#" onclick="doSomething()">Do Something</a> 

不起作用,因爲當然doSomething的方法是對象,而不是一個全局函數的一部分。我可以重寫代碼以使其成爲全局代碼,但寧願避免這樣做。

如果這個問題沒有意義,我會很樂意讓它更清晰。提前致謝。

回答

1

雖然它在全球範圍內坐了,一般不推薦,你可以做這個(如果你只是需要得到它的工作):

function myObject(){ 
    //How do I reference this function? 
    window.doSomething = function (action){ // USE window instead of this !! 
     var doing = action; 
    } 

} 

通過使用window而不是this,它可以在您的處理程序中調用。

+0

我認爲這將幫助我得到它的工作。我會玩弄它,也許玩重做它,所以我不需要調用一個全球範圍內的函數。 –

0

如果已創建的對象實例,那麼你可以說:

<a href="#" onclick="obj.doSomething()">Do Something</a> 

否則,

<a href="#" onclick="function() { return new myObject().doSomething(); }">Do Something</a> 
0

您需要該對象位於全局範圍內。試試這個:

window.myObject = { 
    doSomething: function(action) { 
     alert("Done!"); 
    } 
}; 

,然後你做一個click事件像

<a href="#" onclick="myObject.doSomething()">Do Something</a> 

Example

0

的問題是,有一個對象的實例,其頁面上的元素之間的脫節事件應該觸發對象的功能。有多種方式可以處理,而不會在全球範圍內暴露任何東西。一種方法,例如,將通過一個對象的屬性,以配合二:

給這個元素的ID:

<a id="myLink">Do Something</a> 

添加元素屬性對象:

function myObject(element){ 
    this.element = element; 

    if (this.element) { 
     this.element.onclick = this.doSomething; 
    } 

    this.doSomething = function() { 
     // do stuffs. 
    } 
} 

實例化對象:

var obj = new myObject(document.getElementById('myLink')); 

或簡化對象定義更多:

function myObject(element){ 
    this.element = element; 

    if (this.element) { 
     this.element.onclick = function() { 
     // do stuffs. 
     } 
    } 
} 
0

要定義問題,您需要在特定對象的點擊處理程序中調用另一個代碼中的對象,該對象不能直接從您所在的對象中獲取。真的只有這些選項,你可以選擇看起來最好或者看起來最不引人注目的那個:

  1. 你可以讓對象在全球範圍內調用一個方法。
  2. 您可以使全局範圍內(無論是在父層次結構中還是在某種全局查找中)找到想調用方法的對象。它可以通過這種方式完成,而無需向全局範圍添加更多頂級對象。
  3. 您可以將要調用方法的對象設置爲所有具有click處理程序的對象上的實例數據,以便您可以僅從Click處理程序對象的實例數據中引用全局對象。
  4. 您可以通過使用函數閉包並避免所有全局數據來聲明單擊處理函數以使其具有包含您的對象的參數。