“;这个“;在JavaScript命名空间和事件侦听器中
Problems with "this" in JavaScript namespaces and event listeners
首先,我试图在我的JavaScript程序中使用伪名称空间,如下所示:
// Ish.Com namespace declaration
var Ish = Ish || {};
Ish.Com = Ish.Com || {};
// begin Ish.Com.View namespace
Ish.Com.View = new function() {
var privateVariable;
this.publicFunction = function() {
this.publicFunction2()
};
this.publicFunction2 = function() { ... };
};
我并不热衷于使用this
来调用其他函数,但直到最近,它已经起作用了。但是,我在一些元素中添加了事件侦听器,它们将this
解释为目标对象。
我知道我可以使用完整的名称空间而不是this
来调用侦听器(Ish.Com.View.publicFunction2()
)内部的函数,但侦听器经常调用一个函数,该函数调用另一个函数和另一个。我需要在几乎每个函数调用中使用整个名称空间。
如何使名称空间与事件监听器良好地配合使用我还对实现名称空间的更好方法感兴趣,因为使用this.publicFunction2()
很麻烦。
我对最佳实践非常感兴趣,并学习如何用JavaScript编写架构良好的应用程序。然而,在我对JavaScript有了更深入的了解之前,框架是不可能的。
今天早上我似乎一直在用同样的方式回答每个问题:-)
您可以使用".bind()":
var eventHandler = yourObject.someFunction.bind(yourObject);
这将保证this
在任何东西调用"eventHandler"时都会引用"yourObject"。
在较新的浏览器中,"bind()"函数位于function.prototype对象上。Mozilla文档包含"bind()"的坚实实现,您可以使用它来修补旧的浏览器。
"bind()"所做的是返回一个新函数,该函数显式地安排this
按照您的规定进行绑定。如果您愿意,也可以传递要传递的参数。使用"bind()"的另一种选择是将函数调用封装在您自己的匿名函数中:
var eventHandler = function() { yourObject.someFunction(); };
我不知道我是否完全理解了你的问题。这适合你的需要吗?
var obj = new function() {
var scope = this;
this.fun1 = function() {
return scope.fun2();
}
this.fun2 = function() {
//do sth
}
};
这是由变量上下文和闭包引起的。"this"总是指当前对象。事件函数本身就是一个对象,"this"指的是该对象。如果需要引用父对象,可以使用前面描述的bind,或者将父对象"this"设置为变量,并在事件函数中使用该变量。
// Ish.Com namespace declaration
var Ish = Ish || {};
Ish.Com = Ish.Com || {};
// begin Ish.Com.View namespace
Ish.Com.View = new function() {
var privateVariable, thisObj=this;
this.publicFunction = function() {
thisObj.publicFunction2()
};
this.publicFunction2 = function() { ... };
};
- 如何在for循环中添加事件侦听器
- 未命中服务器发送的事件侦听器
- 如何覆盖原型中的事件侦听器
- 无法将事件侦听器附加到画布
- 如何在d3.js中自定义事件侦听器
- 在es6中,将带有回调的事件侦听器设置为可迭代的
- 事件侦听器未在chrome扩展中的options.js中启动
- IE8更改文本区域上的事件侦听器不工作
- 将事件侦听器添加到文档,而不是签入元素存在,然后添加事件侦听器
- javascript删除事件侦听器
- 我应该/如何清除mousemove JQuery事件侦听器
- 在JQuery中使用谷歌地图Api事件/侦听器
- 如何使用我的Jquery代码创建委托事件侦听器
- 'mousemove'画布中的事件侦听器-指针仅在最后一个矩形中更改
- 为什么此事件侦听器不工作
- 是否可以在数字输入框中的小按钮中添加事件侦听器
- 在Google Chrome扩展中添加事件侦听器
- SVG元素在转换后会丢失事件侦听器
- jQuery事件侦听器多次启动
- 如何在不删除类似侦听器的情况下从父对象中删除jQuery事件侦听器