假设我有一个具有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
不再引用对象,它现在指的是我认为的泛型内联函数。
解决此问题的最佳解决方案是什么?
答案 0 :(得分:3)
答案 1 :(得分:1)
我认为您需要使用call
javascript函数方法。
var options = $.extend({
'onSelect': function() { onSelect.call(this); extOnSelect.call(this); }
}, options);