我们可以在对象中运行某些javascript吗?

我们可以在对象中运行某些javascript吗?,javascript,jquery,object,Javascript,Jquery,Object,我不熟悉JavaScript对象,不知道是否可以在对象中运行JavaScript?这就是我想做的- $('.element').click(function () { var data = $(this).attr('data-home'); if (data !== undefined) { var jsRun = { a: $('.more').show(), b: $('.div').show(),

我不熟悉JavaScript对象,不知道是否可以在对象中运行JavaScript?这就是我想做的-

$('.element').click(function () {
    var data = $(this).attr('data-home');
    if (data !== undefined) {
        var jsRun = {
            a: $('.more').show(),
            b: $('.div').show(),
            c: window.location = "www.url.com",
            d: location.reload()
        };
    }
    return jsRun[data];
});

我编写了returnjsrun,因为我不太确定如果允许的话该怎么做,以及如何让它运行我指定的代码。任何建议都会有帮助,请将所有这些建议都包含在函数中,然后可以将它们作为对象的方法调用

$('.element').click(function () {
    var data = $(this).attr('data-home'),
        jsRun; //your variable declaration is hoisted to here anyway
    if (data !== undefined) {
        jsRun = {
            a: function(){
               $('.more').show();
            },
            ...
        };
        return jsRun[data]();
    }
});

假设数据为a,结果显示$'.more'。我已经将调用移到了条件块中,因为我假设您只希望在数据有值时发生这种情况

将所有这些函数都包含在函数中,之后它们可以作为对象的方法调用

$('.element').click(function () {
    var data = $(this).attr('data-home'),
        jsRun; //your variable declaration is hoisted to here anyway
    if (data !== undefined) {
        jsRun = {
            a: function(){
               $('.more').show();
            },
            ...
        };
        return jsRun[data]();
    }
});

假设数据为a,结果显示$'.more'。我已经将调用移到了条件块中,因为我假设您只希望在数据有值时发生这种情况

您需要使用函数

a: function(){$('more').show();}
然后打电话

jsRun[data]();

注意括号

您需要使用函数

a: function(){$('more').show();}
然后打电话

jsRun[data]();
请注意,括号中没有在对象内运行此代码

$('.element').click(function () {
    var data = $(this).attr('data-home'),
        jsRun; //your variable declaration is hoisted to here anyway
    if (data !== undefined) {
        jsRun = {
            a: function(){
               $('.more').show();
            },
            ...
        };
        return jsRun[data]();
    }
});
您正在创建对象之前运行它。这些表达式将返回的任何内容都将被设置到放置表达式的键中

请注意,任何表达式都会返回某些内容,至少是:未定义的

您没有在对象内部运行此代码

$('.element').click(function () {
    var data = $(this).attr('data-home'),
        jsRun; //your variable declaration is hoisted to here anyway
    if (data !== undefined) {
        jsRun = {
            a: function(){
               $('.more').show();
            },
            ...
        };
        return jsRun[data]();
    }
});
您正在创建对象之前运行它。这些表达式将返回的任何内容都将被设置到放置表达式的键中

请注意,任何表达式都会返回某些内容,至少:未定义的使用开关:

$('.element').on('click', function() {
    switch ( $(this).data('home') ) {
       case 'a': $('.more').show();
         break;
       case 'b': $('.div').show();
         break;
       case 'c':  window.location = "www.url.com";
         break;
       case 'd':  location.reload();
         break;
       default:
                  goNuts(); // do something if none of the above 
    }
});
使用开关:

$('.element').on('click', function() {
    switch ( $(this).data('home') ) {
       case 'a': $('.more').show();
         break;
       case 'b': $('.div').show();
         break;
       case 'c':  window.location = "www.url.com";
         break;
       case 'd':  location.reload();
         break;
       default:
                  goNuts(); // do something if none of the above 
    }
});


你试过了吗?我认为switch/case更合适,因为OP希望根据data@Asad-我知道它不管用,但与其问它是否管用,不如试试看会发生什么?@adeneo可能不会被否决,这就是switch case的用途。这并不重要,动态元素只需要一个委托事件处理程序,对象或开关将是相同的。您尝试过吗?我认为switch/case更合适,因为OP希望根据data@Asad-我知道它不管用,但与其问它是否管用,不如试试看会发生什么?@adeneo可能不会被否决,这就是switch case的用途。这并不重要,动态元素只需要一个委托事件处理程序,对象或开关将是相同的。另一个选项是使用字符串和eval,但不要这样做。当错误使用时,eval是危险的,并且速度较慢。我只是在你在其他地方找到支持它的建议时才提到它。是的,我听说过eval的拼写,比如邪恶的LOL,有人告诉我,所以我总是偏离它,哈哈,另一个选择是使用字符串和eval,但不要这样做。当错误使用时,eval是危险的,并且速度较慢。我只是在你在其他地方找到支持它的建议的情况下才提到它。是的,我听说了eval的拼写,比如邪恶的LOL,有人告诉我,所以我总是偏离它,哈哈谢谢你,我很惊讶我居然知道在结尾处写回信,哈哈!如果你能相信的话,这是我第一次真正使用return。在接受答案之前,我将尝试一下。你也得到了一张选票@Dave@EasyBB我做了一些小的改变,你可能也想考虑一下。是的,我看到了。我可以看到调用被移动到了条件的内部。但是你能解释一下第3行的变量声明吗?这是成为一个全局变量还是什么?我也不需要放置var jsRun=?@EasyBB当你在一个范围内的任何地方声明一个变量时,JS会自动将它的声明移动到范围的顶部,但不会将它的赋值移动到范围的顶部。因此,函数{alert'hello';var x=foo;}实际上将作为函数{var x;alert'hello';x=foo;}运行。我想我应该把它说得更清楚。谢谢你,我很惊讶我居然知道在结尾写return,哈哈!如果你能相信的话,这是我第一次真正使用return。在接受答案之前,我将尝试一下。你也得到了一张选票@Dave@EasyBB我做了一些小的改变,你可能也想考虑一下。是的,我看到了。我可以看到调用被移动到了条件的内部。但是你能解释一下第3行的变量声明吗?这是成为一个全局变量还是什么?我也不需要放置var jsRun=?@EasyBB当你在一个范围内的任何地方声明一个变量时,JS会自动将它的声明移动到范围的顶部,但不会将它的赋值移动到范围的顶部。因此,函数{alert'hello';var x=foo;}实际上将作为函数{var x;alert'hello';x=foo;}运行。我爱你
好的,我会说得更清楚。哦,好的,谢谢你给我看开关盒是什么。虽然看起来它们的编码行数是一样的。总重量相同。我相信我会坚持客观感觉。除非你有任何其他理由说明我为什么要用这个而不是对象?比如两个的速度。看你已经有两票了;没有投票权,哈哈!谢谢你和我一起工作,给我看这个,我真的很感激!哦,好的,谢谢你给我看开关盒是什么。虽然看起来它们的编码行数是一样的。总重量相同。我相信我会坚持客观感觉。除非你有任何其他理由说明我为什么要用这个而不是对象?比如两个的速度。看你已经有两票了;没有投票权,哈哈!谢谢你和我一起工作,给我看这个,我真的很感激!