【问题标题】:variable scope and closure inside a module pattern javascript instance模块模式javascript实例中的变量范围和闭包
【发布时间】:2010-07-26 04:01:06
【问题描述】:

我正在编写一个 jQuery 插件,并且我正在以非 jquery-community-standard 方式编写它,主要是 以保持可移植性和可扩展性。

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

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

当我尝试关闭窗口时出现问题,我收到“this.auga is undefined”错误。当我创建关闭按钮(在构建窗口方法内)时,我附加了一个单击事件.click(this.hide) - 这是函数原型中的另一种方法。我的.resize 事件也不起作用,因为.centerAuga 方法利用了我的this.win 属性。收到this.win is undefined 错误。

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

这不是“请做这件事”。我正在编写这个插件来更加熟悉 JavaScript。因此,如果有人有任何见解,请 - 我全神贯注。

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

【问题讨论】:

    标签: javascript jquery design-patterns oop


    【解决方案1】:

    在 jQuery 回调中,“this”变量将指向创建事件的元素,即使回调函数在您的对象中。

    要在对象开始时解决此问题,请执行以下操作:

    var self = this;
    

    然后每当你想引用你的对象时,使用“self”而不是“this”。

    【讨论】:

    • 我认为这不一定是问题所在。我认为问题在于让原型访问活动实例。我知道如何在正常设置中分配“this”,我认为问题出在使用带有声明实例的原型方法。 “this”在原型中访问什么?
    • 在原型中使用它并没有错。它看起来确实像一个与 jquery 冲突的参考问题。例如你这样做:this.win.resize(this.centerAuga)。这意味着在奥加中心,“this”将不再指向您的对象。但你仍然用它来表示那个意思。
    • 我讨厌你是对的,因为我以为我知道我在做什么。那。 jsfiddle.net/G26aM/18
    猜你喜欢
    • 1970-01-01
    • 2014-01-20
    • 2015-11-01
    • 2019-09-10
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 2018-05-22
    • 2017-07-07
    相关资源
    最近更新 更多