JavaScript 多实例

标签 javascript object multiple-instances

我正在尝试创建 JavaScript“类”或对象的多个实例,但它似乎充当单例...有人可以帮助我使用以下代码吗?

        (function() {
            /*
             * Canvas object
             */
            var Canvas = function( el ) {
                _self = this;
                _self.el = el;
            }
            Canvas.prototype.init = function() {
                _self.el.style.backgroundColor = "#000";
                _self.el.addEventListener( "mousedown", _self.onMouseDown );
            }
            Canvas.prototype.onMouseDown = function() {
                console.log( 'onMouseDown: ', _self.el );
            }

            var cOne = new Canvas( document.getElementById('one') );
            var cTwo = new Canvas( document.getElementById('two') );
            cOne.init();
            cTwo.init();
        })();

最佳答案

当变量声明中不使用var时,它就成为全局变量。因此,当您创建新实例时,它会更新全局变量。

此方法的另一种方法是简单地将 el 设为对象属性:

var Canvas = function(el) {
    this.el = el;
};

jsFiddle Demo

<小时/>

此外,您应该考虑将 .onMouseDown 方法绑定(bind)到当前对象。改用这个:

this.el.addEventListener(..., this.onMouseDown.bind(this));

或者这个:

Canvas.prototype.init = function() {
    var self = this;
    ...
    this.el.addEventListener(..., function() {
        self.onMouseDown.call(self);
    });
};

关于JavaScript 多实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14742168/

相关文章:

c# - 自托管 WCF 服务的多个实例

javascript - 正则表达式:匹配文本段落中的所有内容,特定短语除外

javascript - 通过 https 使用非安全 Websocket 的 JsSip 客户端

javascript - 如何使用 xpath 计算子元素距父元素的深度?

java - 将 Object[] 数组转换为 java 中的 int [] 数组?

Java - 对数组中的对象进行冒泡排序

javascript - 创建多个对象数组

javascript - forEach() 与 Array.prototype.forEach.call()

mysql - 我在 Mysql 数据库上有两个触发器,但我只能使用 SHOW TRIGGERS 列出一个

jquery - 我怎样才能让这个 jQuery 动画出现在它点击的实际 div 上?