2014-02-22 66 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

相关问题