Javascript ';这';不';赋值和绑定到变量时不起作用

Javascript ';这';不';赋值和绑定到变量时不起作用,javascript,Javascript,我正在尝试创建一个自定义模块。我正在使用prototype添加其他方法。模块将有一个事件,在该事件中,我必须使用“this”从模块访问一个方法。我将使用bind执行此操作 我遇到了一个小问题。我创建了一个方法,然后使用prototype,用bind方法将该方法分配给变量。问题是,“this”不是我通过的bind。以下是示例代码: 函数MyPlugin(){ this.hello='hello' document.addEventListener('click',this.clickedBin

我正在尝试创建一个自定义模块。我正在使用
prototype
添加其他方法。模块将有一个事件,在该事件中,我必须使用“
this
”从模块访问一个方法。我将使用
bind
执行此操作

我遇到了一个小问题。我创建了一个方法,然后使用
prototype
,用
bind
方法将该方法分配给
变量。问题是,“
this
”不是我通过的
bind
。以下是示例代码:

函数MyPlugin(){
this.hello='hello'
document.addEventListener('click',this.clickedBinded);
这个。点击绑定('e');
}
MyPlugin.prototype.clickedBinded=clicked.bind(这个);
函数(e){
log(this.hello,e);
}
var plugin1=新的MyPlugin()
.bind()
必须在您希望将其绑定到的对象已经创建之后,以及在正确的上下文中对所需对象进行引用时调用。首次加载代码时,您正在调用
.bind()
。对于
,该值没有意义。相反,请将代码更改为:

函数MyPlugin(){
this.hello='hello';
//保存绑定函数,以便以后可以使用它删除侦听器
this.fn=this.clicked.bind(this);
document.addEventListener('click',this.fn);
点击('e');
}
MyPlugin.prototype.clicked=函数(e){
log(this.hello,e);
}
//方法,该方法将删除事件侦听器
MyPlugin.prototype.stopClick=函数(){
document.removeEventListener('click',this.fn);
}

var plugin1=新的MyPlugin()正如jfriend00所解释的,应该在构造函数内绑定事件侦听器。每个实例将有一个不同的侦听器

如果希望能够删除侦听器,请将其存储在实例中:

var click=document.getElementById('click'),
remove=document.getElementById('remove');
函数MyPlugin(){
this.hello='hello';
var listener=clicked.bind(这个);
click.addEventListener('click',listener);
remove.addEventListener('click',function self()){
click.removeEventListener('click',listener);
remove.removeEventListener('click',self');
});
}
单击的函数(事件){
log(this.hello);
}
var plugin1=新的MyPlugin()


实际上,
这正是您传递给
bind
的内容。。。看看代码,当执行那行代码时,你认为这是什么?它将是
窗口
,但决不会是一个甚至没有被实例化的对象,因为您的代码的行为符合预期。看来你完全误解了这一点。很可能,您只需要
MyPlugin.prototype.clickedBinded=clicked
@Oriol这是我的想法,但是调用
addEventListener
@Barmar不起作用。好的,我只看到了
clickedBinded
调用,而没有看到事件侦听器。然后我会像jfriend所说的那样绑定听众。@JaromandaX谢谢!这就解释了为什么它是
窗口
。真不敢相信我没听懂!(刚刚了解了
这个
,和
绑定
)我更新了问题。你能把你的代码转换成一个堆栈片段让我们运行吗?@Jessica-没问题。您只需保存绑定引用,以便以后可以使用它删除事件处理程序。请参阅我问题中的更新代码。下次发布第一个问题时,请描述实际问题。谢谢!是否有一种方法可以执行
this.fn=this.clicked.bind(this)
使用
prototype
?@Jessica-我不知道你说的“使用prototype”是什么意思。有没有办法用
MyPlugin.prototype来代替
谢谢!有没有一种方法可以使用
原型