使用“this”作为功能?

时间:2013-07-24 19:48:55

标签: javascript this

我用一条我不理解的行继承了一些代码。

function updateQty () {
        obj.find('.inputAmount').html(qty);
        input.val(qty);

        $.each(change_actions, function() {
            this(qty);
        });
    }

.each函数内究竟发生了什么?我以前从未见过this(var)以这种方式使用过。

3 个答案:

答案 0 :(得分:5)

this内的

$.each指的是您正在循环的当前对象。

对象必须是一个函数才能传递一些东西。

答案 1 :(得分:3)

您可以参考以下示例:

var change_actions = [
    function(x) { alert(x + 1); },
    function(x) { alert(x + 2); }
];

var qty = 5;
$.each(change_actions, function() {
   this(qty); 
});

JSFiddle:http://jsfiddle.net/fuyz2/

答案 2 :(得分:3)

作者使用绑定设置自己的事件,因此change_actions可能是在数量发生变化时订阅的函数。

尝试这样的事情:

// initialize with a value
var actions = [
    function(x){ console.log('I see a new x: ' + x); }
];

// add actions "later"
actions.push(function(x){ console.log('Yup, a new x: ' + x); });

// Then execute them:
$.each(actions, function(){
  this(4);
});

// add another one still
actions.push(function(x){ console.log(x + ' looks new'); });

// re-iterate over them
// Then execute them:
$.each(actions, function(){
  this(5);
});

结果:

// first iteration (only 2 subscribed events)
[15:56:50.030] "I see a new x: 4"
[15:56:50.030] "Yup, a new x: 4"

// second iteration (now we have 3, one was added later)
[15:56:50.030] "I see a new x: 5"
[15:56:50.030] "Yup, a new x: 5"
[15:56:50.030] "5 looks new"  // <-- new subscription

将其视为click事件,以及如何通过绑定到$('element').click()来添加订阅。每次点击发生时,任何订阅的事件都会被触发。