Jquery 继承和原型事件

Jquery 继承和原型事件,jquery,prototype,Jquery,Prototype,阅读完本文后,我尝试创建一个对象窗口,使用新构造函数创建的对象可以作为窗口-当有人按下右上角的“X”按钮时,窗口关闭(div的css设置为display:none;): var WindowSingle=函数(obj){ this.obj=obj; this.ishiden=false; this.obj.show(); this.events.click.call(this); }; WindowSingle.prototype.Close=函数(){ this.ishiden=true;

阅读完本文后,我尝试创建一个对象窗口,使用新构造函数创建的对象可以作为窗口-当有人按下右上角的“X”按钮时,窗口关闭(div的css设置为display:none;):

var WindowSingle=函数(obj){
this.obj=obj;
this.ishiden=false;
this.obj.show();
this.events.click.call(this);
};
WindowSingle.prototype.Close=函数(){
this.ishiden=true;
this.obj.closest('.window').hide();
};
WindowSingle.prototype.events={
“单击”:函数(){
var self=这个;
var obj=this.obj;
obj.find('.closeX')。在('click',function()上{
self.Close();
});
}
};
$(文档).ready(函数(){
MyWindowsSingle=新WindowsSingle($(“#myWindow”);
});
.window{
边框:1px纯灰;
利润率:10px;
填充:10px;
显示:无;
宽度:250px;
}
closeX先生{
位置:相对位置;
顶部:0px;
左:230像素;
光标:指针;
}

X
知识产权是一种权利,是一种精英的权利,是劳动和财富的暂时性权利。知识产权是一种权利,是一种精英的权利,是劳动和财富的暂时性权利。

第一个问题的答案非常简单。要循环浏览所有可能有CSS选择器的事件,只需执行以下操作:

var WindowSingle = function (obj) {

    this.obj = obj;
    this.isHidden = false;
    this.obj.show();
    this.registerEvents();

};

WindowSingle.prototype.registerEvents = function () {

    var self = this;

    Object.keys(self.events).forEach(function (key) {

        var parts = key.split(" ");

        // Handle CSS selector.
        if (parts[1]) {

            self.obj.on(parts[0], parts[1], function () {
                self.Close();
            });

        // Handle no CSS selector.
        } else {

            self.obj.on(parts[0], function () {
                self.Close();
            });

        }

    });

}
.on('click',self.Close)
问题稍微高级一点。在这种情况下,事件将绑定到click事件,问题在于函数的上下文(这是什么意思)。jQuery总是将事件处理程序的上下文设置为DOM元素,但在本例中,您需要将其作为
WindowSingle
实例。两种解决方案是绑定上下文或创建一个新函数

var self = this;

// Bind the context.
obj.find('.closeX').on('click', self.Close.bind(self));

// Create a new function.
obj.find('.closeX').on('click', function () {
    self.Close();
});

我希望这能有所帮助。

你第一个问题的答案非常简单。要循环浏览所有可能有CSS选择器的事件,只需执行以下操作:

var WindowSingle = function (obj) {

    this.obj = obj;
    this.isHidden = false;
    this.obj.show();
    this.registerEvents();

};

WindowSingle.prototype.registerEvents = function () {

    var self = this;

    Object.keys(self.events).forEach(function (key) {

        var parts = key.split(" ");

        // Handle CSS selector.
        if (parts[1]) {

            self.obj.on(parts[0], parts[1], function () {
                self.Close();
            });

        // Handle no CSS selector.
        } else {

            self.obj.on(parts[0], function () {
                self.Close();
            });

        }

    });

}
.on('click',self.Close)
问题稍微高级一点。在这种情况下,事件将绑定到click事件,问题在于函数的上下文(这是什么意思)。jQuery总是将事件处理程序的上下文设置为DOM元素,但在本例中,您需要将其作为
WindowSingle
实例。两种解决方案是绑定上下文或创建一个新函数

var self = this;

// Bind the context.
obj.find('.closeX').on('click', self.Close.bind(self));

// Create a new function.
obj.find('.closeX').on('click', function () {
    self.Close();
});
我希望这有帮助