2

假设我有一个具有 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不再指代对象,它现在指的是我认为的泛型内联函数。

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

4

2 回答 2

3

用途applyarguments对象

extOnSelect.apply(this, arguments);

extOnSelect像当前函数一样调用。

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

于 2012-10-18T10:15:44.093 回答
1

我认为您需要使用calljavascript函数的方法。

var options = $.extend({ 
'onSelect': function() { onSelect.call(this); extOnSelect.call(this); }
}, options);
于 2012-10-18T10:15:22.093 回答