【发布时间】:2011-09-05 13:29:13
【问题描述】:
首先,我尝试在我的 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 有更透彻的了解,否则框架是不可能的。
【问题讨论】:
-
您能否提供一个如何绑定事件侦听器的示例?
-
var clickListener = function(e) { ... };canvas.addEventListener("click", clickListener, false); -
Mozilla对这个问题有很好的解释和解决方案here
-
监听器经常调用一个函数,一个函数调用另一个,然后另一个...你只需要以正确的方式调用第一个函数。例如。
clickListener = function(){Ish.Go.View.publicFunction2()}。使用Ish.Go.View.publicFunction2.bind(Ish.Go.View)或function() { var view = Ish.Go.View; view.publicFunction2(); }并没有太大区别。 -
@Felix 我实际上采用了这种方法,并将我的呼叫限制在听众内部。我担心使用 bind() 会使习惯于
this引用事件侦听器内的目标对象的人感到困惑。
标签: javascript javascript-events javascript-namespaces