遵循jQuery 插件模式methods.myfunc
,如果我们使用 apply() 来定义this
和应用于this 的范围,如何找到函数的元数,比如函数arguments
?
(function($, window, document ){
"use strict";
//...
methods = {
myfunc: function(){
// myfunc.length? tried, didnt work
// arguments.length? tried, didnt work
// methods.myfunc.length? tried, didnt work
// arguments.callee tried, doesnt work in strict mode
}
//...
}
$.MyPluginThing = 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, window );
}else{
$.error( "Method " + method + " does not exist on jQuery.MyPluginThing" );
}
}...
这可能会暴露我对函数范围的一些无知,但我在这里很困惑,并且没有找到一个足够好的例子来解释这一点。
我对这个问题的部分灵感来自 NodeJS/ExpressJS,它们为某些函数提供了可变数量的参数。例如,如果传递了 3 个参数,则假定存在错误对象,但您也可以轻松传递两个参数,这没有问题!
更新:将代码中的函数从 init 更改为 myfunc