通过匿名函数在javascript中调用函数时是否可以保留'this'?

时间:2012-10-18 10:12:05

标签: javascript jquery

假设我有一个具有onSelect属性的jquery插件。用户将其设置为函数,并且在调用该函数时,this指的是插件应用于的对象。一切都很好。

如果我想编写一个包装此插件的插件,为了向onSelect注入一些代码,我会这样做:

// Get whatever the user put in
var extOnSelect = options['onSelect'];

// delete the onSelect attribute
delete options['onSelect'];

// re-add onSelect as an anonymous function that calls my method and the user's
var options = $.extend({ 
    'onSelect': function() { onSelect(); extOnSelect(); }
    }, options);

// call the plugin that I am wrapping / injecting extra onSelect code into
$(this).externalPlugin(options);

然后它将传递我自己的onSelect代码,同时保留用户输入的内容。

唯一的问题是,在这两个函数中this不再引用对象,它现在指的是我认为的泛型内联函数。

解决此问题的最佳解决方案是什么?

2 个答案:

答案 0 :(得分:3)

使用applyarguments object

extOnSelect.apply(this, arguments);

与当前函数完全一样调用extOnSelect

您可以使用call,但是您需要明确传递事件对象(以及其他可能的参数)。

答案 1 :(得分:1)

我认为您需要使用call javascript函数方法。

var options = $.extend({ 
'onSelect': function() { onSelect.call(this); extOnSelect.call(this); }
}, options);