JavaScript模块模式中的变量作用域和闭包实例

3

我正在编写一个jQuery插件,但是我没有按照jQuery社区标准的方式来编写它,主要是为了保持可移植性和可扩展性。

当从原型中访问在函数中声明的变量时,我遇到了一些问题。

也许我的模型非常错误,但我希望有人能指出实现我的目标的正确方法,即创建同一类的多个实例。

当我尝试关闭窗口时,我会收到“this.auga未定义”的错误。当我创建关闭按钮(在构建窗口方法内部)时,我附加了一个点击事件.click(this.hide)——这是函数原型内的另一个方法。此外,我的.resize事件无法工作,因为.centerAuga方法使用了我的this.win属性。会出现this.win未定义的错误。

为什么.show方法有定义的this.auga,而.hide方法仍然未定义?我知道我正在从实例本身访问.show方法——但为什么其他方法也不能访问实例?

这不是“请让它工作”。我正在编写这个插件以更加熟悉JavaScript。所以如果有人有任何见解,请告诉我。

这是示例的链接:
http://jsfiddle.net/G26aM/16/

1个回答

4
在jQuery回调中,“this”变量将指向创建事件的元素,即使回调函数在您的对象中也是如此。
为了解决这个问题,在您的对象开始时进行以下操作:
var self = this;

当你想引用对象时,请使用"self"而不是"this"。


我不认为这一定是问题所在。我认为问题在于原型访问活动实例。我知道如何在正常情况下分配“this”,但我认为问题来自使用已声明实例的原型方法。在原型中,“this”访问什么? - Chase Wilson
在原型中使用这个没有问题。它看起来像是一个this引用问题与jquery冲突。例如,你这样做:this.win.resize(this.centerAuga)。这意味着在center Auga中,“this”将不再指向你的对象。但你仍然在那里使用它来表示那个对象。 - Matthew Manela
我讨厌你是对的,因为我以为我知道我在做什么。http://jsfiddle.net/G26aM/18/ <-- 可行 - Chase Wilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接