面向对象的Javascript自定义addEvent方法

面向对象的Javascript自定义addEvent方法,javascript,jquery,html,oop,Javascript,Jquery,Html,Oop,关于开发面向对象的javascript和解析变量,我有一个问题。有关更多信息,请参阅 我有以下创建事件的代码: $(document).ready(function() { tools.addEvent('.someButton', 'click', user.getUserDetails); )}; var tools = { addEvent: function(to, type, fn) { $(to).live(type, fn); } } v

关于开发面向对象的javascript和解析变量,我有一个问题。有关更多信息,请参阅

我有以下创建事件的代码:

$(document).ready(function() {
    tools.addEvent('.someButton', 'click', user.getUserDetails);
)};

var tools = {
    addEvent: function(to, type, fn) {
        $(to).live(type, fn);
    }
}

var user = {
    getUserDetails: function(userID) {
        console.log(userID);
    }
}
如您所见,它使用三个变量调用addEvent方法;要将事件附加到的DOM元素、事件的类型以及触发事件时要运行的函数

我遇到的问题是将变量解析为getUserDetails方法,我知道有两个选项:

很明显,我可以在开始时有一行代码来检查发送者的属性。例如,.someButton可以有一个属性userID=12345。但是,这并不理想,因为该函数是从多个不同的位置运行的,这意味着该检查并不总是可用的,并且代码更难管理

更好的选择是使用另一个方法,如user.willGetUserDetails,并使用此方法从DOM获取属性userID。这可以从页面上的任何位置运行,并在获取用户ID后调用getUserDetails。每当用户详细信息来自另一个函数时,我们只需直接调用getUserDetails

理想的情况是,如果我可以修改上面的代码,直接传递一个变量,甚至是一个未定义的变量。有人知道如何做到这一点吗


在addEvent代码中再添加一个参数,该代码接受要传递给事件的数据

var tools = {
    addEvent: function(to, type, data, fn) {
        if ($.isFunction(data)) {
            fn = data;
            data = {};
        }
        $(to).live(type, data, fn);
    }
}
另外,我建议改为使用delegate,或1.7中的.on+

var tools = {
    addEvent: function(to, type, data, fn) {
        if ($.isFunction(data)) {
            fn = data;
            data = {};
        }
        $(document).delegate(to, type, data, fn);
    }
}

现在您可以这样使用它:

$(document).ready(function() {
    tools.addEvent('.someButton', 'click', {userID: theuserid}, user.getUserDetails);
)};

var user = {
    getUserDetails: function(event) {
        console.log(event.data.userID);
    }
}

在addEvent代码中再添加一个参数,该代码接受要传递给事件的数据

var tools = {
    addEvent: function(to, type, data, fn) {
        if ($.isFunction(data)) {
            fn = data;
            data = {};
        }
        $(to).live(type, data, fn);
    }
}
另外,我建议改为使用delegate,或1.7中的.on+

var tools = {
    addEvent: function(to, type, data, fn) {
        if ($.isFunction(data)) {
            fn = data;
            data = {};
        }
        $(document).delegate(to, type, data, fn);
    }
}

现在您可以这样使用它:

$(document).ready(function() {
    tools.addEvent('.someButton', 'click', {userID: theuserid}, user.getUserDetails);
)};

var user = {
    getUserDetails: function(event) {
        console.log(event.data.userID);
    }
}

如果要解析变量,只需使用JSON.stringifyvariable;。另外,不要使用.live,因为它是从1.9版开始从jQuery中删除的。如果您想解析变量,只需使用JSON.stringifyvariable;。另外,不要使用.live,因为它是从1.9Wow开始从jQuery中删除的!回答得很好,速度也很快。不用说,它按我希望的那样工作。感谢+1为1.7之前的版本添加委托示例,因为它仍然被大量使用,对于未来的用户来说是非常有用的信息。@Patrick如果您不使用.live版本,最好再添加一个参数作为上下文而不是文档。哇!回答得很好,速度也很快。不用说,它按我希望的那样工作。感谢+1为1.7之前的版本添加委托示例,因为它仍然被大量使用,对于未来的用户来说是非常有用的信息。@Patrick如果您不使用.live版本,最好再添加一个参数作为上下文而不是文档。