2014-02-22 67 views
0

我寫了一個類,這是從它取得的一個片段來演示我的問題。如何從方法內部訪問基礎對象Javascript

<!--language:lang-js-->  
var myclass = function() { 
    this.addItem = function() { 
     //generateDiv and append.. 
     //generatedeletebtn and append 
     btn.onclick = this.deleteItem; 
    } 
    this.deleteItem = function() { 
     console.log(this); 
    } 
} 

裏面的deleteItem功能,this代表HTML元素點擊。有沒有一種方法可以直接訪問myclass對象?

我試圖改變 div.onclick = this.deleteItemdiv.onclick = this.deleteItem(this)其中就訪問對象,但括號調用函數,並儘快刪除的項目,因爲它們可以補充,這樣是沒有好作品。

+0

您是否需要訪問myclass對象以及被單擊的元素(在'deleteItem'函數內)?或者你只需​​要myclass對象? –

回答

2

這看起來像bind

btn.onclick = this.deleteItem.bind(this); 

工作你能想到的bind包裝紙功能的通過this.deleteItem在另一函數B,它總是調用一個給定的範圍內引用第一個參數bind

MDN如果您不能假設bind在您的環境中可用,那麼可以使用一個polyfill。

+0

感謝您的洞察力 – Kiee

1

您可以使用閉包來將對象的引用存儲在名爲that的變量中。然後,當deleteItem最終被調用時,它應該使用myclass對象作爲that

var myclass = function() { 
    var that = this; 

    this.deleteItem = function() { 
     console.log(that); 
    } 
} 

你不應該擔心與這一個polyfills。

+1

+1,因爲這樣可以在不需要每次創建新函數時節省內存,但是請記住,如果您創建了許多'myclass'實例,它們將不會被銷燬,直到**所有對該實例的引用**都被銷燬了(即,每個'deleteItem'都被分配了,我的回答也是如此)。 –

+0

有用的知識,謝謝 –

+0

在理論上工作,但如果我因爲某種原因有3個myclass實例,它只針對最後創建的實例,而綁定對每個實例唯一地工作。 – Kiee

相關問題