我是jquery插件创作的新手,并想知道插件中的方法如何在同一个插件中调用另一个方法。
在示例代码中,我试图从f1调用f2,但由于f2方法中的this.each(),我有一个js错误。
你可以开导我吗?由于
编辑:f1()和f2()可以从插件外部调用$ .pluginName('f1')和$ .pluginName('f2')。
我想要的是在f1()中的somme代码之后调用f2()。
;
(function( $ ){
'use strict';
var pluginName = 'pluginName';
var defaults = {
};
var methods = {
init : function( options ) {
return this.each(function ( ) {
var $this = $(this);
var settings = $.extend({}, defaults, options);
$this.data(pluginName, settings);
return $this;
});
},
f1 : function() {
methods.f2(); // Uncaught TypeError: Object #<Object> has no method 'each'
},
f2 : function() {
return this.each(function() {
});
}
};
$.fn[pluginName] = function( method ) {
if ( methods[method] ) {
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.' + pluginName + '()');
}
};
})( jQuery );
答案 0 :(得分:1)
这显示错误,因为当您从f2()
调用f1()
时您没有将jQuery对象传递给f2()
,因此this
不会引用f2()
内的同一对象1}}因此它不会工作。
因此,请更改您的f1()
代码
f1 : function() {
// some code of F1
this.css('color','red');
// now call f2
methods.f2.apply(this,[]);
},
它指定this
在f2()
内的含义。在这种情况下,我们传递jQuery对象。
更多关于.apply