【问题标题】:Can I call a method on other objects created by the same constructor in javascript?我可以在 javascript 中由同一构造函数创建的其他对象上调用方法吗?
【发布时间】:2013-02-08 22:09:12
【问题描述】:

假设我有一个对象构造函数,第三方页面开发人员可以将其插入到他们的页面中,称为“Widget”。例如,它可能是一个工具提示之类的东西。

var Widget = function(settings, callbacks) {
    this.hide = function() {
        //some code...
    };

    this.show = function() {
        this.isShowing = true;

        //more code...
    }
}

当这个小部件显示时,我想隐藏任何其他显示的小部件。有没有办法“显示”方法可以在“this.isShowing”为真的 Widget 的其他实例或所有 Widget 实例上调用“hide”方法?

【问题讨论】:

    标签: javascript oop object constructor


    【解决方案1】:

    您可以,但您需要维护对这些实例的引用。您可以在函数本身的属性上维护它们:

    var Widget = function(settings, callbacks) {
      Widget.instances.push(this);
      // More code
    };
    Widget.instances = [];
    

    然后,只需访问 Widget.instances 即可获取创建的所有小部件。

    您可能想要创建某种析构函数来从列表中删除一个小部件(myWidget.destroy() 或其他东西),因为如果您实例化太多小部件,这可能会产生内存泄漏。

    【讨论】:

    • @Renato:太好了!我应该意识到这一点。在 JavaScript 中,一切都是对象,就连构造函数也是可访问的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 2016-06-19
    • 2014-05-21
    相关资源
    最近更新 更多