检查JavaScript对象是否已经实例化

时间:2012-12-16 20:45:21

标签: javascript object

我正在开发一个小游戏,我实例化了一些像这样的对象:

this.polyfills = new Application.Polyfills(this.options);

事情就是那段代码在点击(页面上的某些元素)上被称为一堆代码,我不希望每次实例化该对象,因为它已经完成了它的目的。我尝试过这样的事情:

this.polyfills = window.Application.Polyfills || new Application.Polyfills(this.options);

但是上面显然不起作用:)那么将会采取什么方式去做我刚才描述的事情?

编辑:在点击时实例化的对象(我称之为类)是这样的:

Application.Level = function(_level, _levels, callback) {

    this.helpers = (this.helpers instanceof Application.Helpers) ? true : new Application.Helpers();

    var self = this,

        _options = {
            levels : {
                count : _levels,
                settings : (_level === undefined || _level === '') ? null : self.setLevelSettings(_level, _levels),
                template : 'templates/levels.php'
            },

            api : {
                getImages : {
                    service : 'api/get-images.php',
                    directory : 'assets/img/'
                }
            }
        };

    this.options = new Application.Defaults(_options);
    this.polyfills = (this.polyfills instanceof Application.Polyfills) ? true : new Application.Polyfills(this.options);

    return this.getImages(self.options.api.getImages.service, { url : self.options.api.getImages.directory }, function(data){
        return (typeof callback === 'function' && callback !== undefined) ? callback.apply( callback, [ data, self.options, self.helpers ] ) : 'Argument : Invalid [ Function Required ]';
    });
};

其中包含通过prototype定义的属性的集合。那么我想要做的可能是不可能的?!

3 个答案:

答案 0 :(得分:8)

怎么样?

this.polyfills = this.polyfills || new Application.Polyfills(this.options);

答案 1 :(得分:1)

使用instanceof:

this.polyfills = this.polyfills instanceof Application.Polyfills ? this.polyfills : new Application.Polyfills(this.options)

这将验证它不仅仅是一个对象,而是一个Application.Polyfills实例。

答案 2 :(得分:0)

我使用一些简单的东西:

if(typeof myClass.prototype === "undefined") {
   // the class is instanciated
}

请检查this pen以查看有效示例。

我喜欢它,因为它不依赖于调用的上下文。