【问题标题】:What is the convention for dynamically creating an object instance?动态创建对象实例的约定是什么?
【发布时间】:2011-02-11 19:56:11
【问题描述】:

我正在创建一个允许您在其上放置多个小部件的页面,并且可以在页面上复制一些小部件。所以我需要了解动态创建对象实例的正确约定。

// my bulb object
var bulb = {
    state: 0
};

// programatically, hard-coded instance name of 'bulb1'
var bulb1 = new bulb();

$('button').click(function() {
    // create another new bulb instance here with dynamic name
});

还是我一起走错了路?

谢谢。

【问题讨论】:

    标签: javascript object dynamic


    【解决方案1】:

    在 JavaScript 中,我们使用函数(所谓的构造函数)来实例化对象实例。

    function Bulb() {
        this.state = 0;
    }
    
    // one instance
    var bulb1 = new Bulb();
    
    // another instance
    var bulb2 = new Bulb();
    

    您的代码不起作用,因为您的 bulb 是常规对象而不是函数,因此您无法调用它(您正尝试使用 bulb() 进行操作)。


    更新:您可以将实例存储到 Array 全局变量中:

    var bulbs = [];
    

    然后,每当您创建一个新实例时,只需确保将其放入数组中即可。

    $('button').click(function() {
        var bulb = new Bulb();
    
        // do stuff with bulb
    
        // make sure to store it into the Array
        bulbs.push(bulb);
    });
    

    您可以随时访问实例,如下所示:

    bulbs[0] // the 1. instance
    bulbs[1] // the 2. instance
    // etc.
    

    【讨论】:

    • 是的,我应该在发布之前进行测试。不过,我的问题仍然存在。我需要动态实例化的对象。命名或引用它们的约定是什么?
    • @Shawn 在我上面的回答中,bulb1bulb2 是实例化对象。您可以将var bulb3 = new Bulb() 放在您的点击处理程序中以使其具有动态性。命名约定是:1.构造函数应该大写(如Dog、Person、School等),2.对象实例应该小写。
    • 我担心当您多次单击按钮以创建另一个对象实例时该怎么办。
    • Sime,非常感谢您继续解释。我只是担心当你再次执行 'var bulb = new Bub()' 时,这不会覆盖之前的 'bulb' 实例吗?
    • @Shawn 没有。每次点击事件发生时,都会再次调用该函数。每次调用函数时,都会为该函数调用创建一个新的作用域(命名空间)。一旦函数调用返回,所有的局部变量都会被销毁。
    猜你喜欢
    • 1970-01-01
    • 2013-10-20
    • 2016-01-29
    • 2017-09-28
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    相关资源
    最近更新 更多