是否可以在不改变行为的情况下重新定义javascript函数的部分
Is it possible to redefine parts of a javascript function without changing the behaviour?
我需要定义一个回调,它将由外部库调用。此回调使用1个参数调用:
function(item) {};
在我的情况下,我需要包括第二个参数,我目前通过使用"bind"方法解决这个参数。
function(item) {
var value = this.value
}.bind({'value': value});
我不想每次需要定义shuch回调函数时都写这篇文章。相反,我想写这样的东西:
function(item, value) {};
然后将其转换为绑定方法,以满足外部库的要求。
这可能吗?或者有其他方法可以做到这一点吗?
感谢
您想要使用闭包。这是基本模式,虽然不像乔治建议的那么简单。但就性能而言,没有那么大的成功率(接近最低)。
定义一个函数:
myValueFunction(value, fn){
return fn;
}
由于您似乎是在说您的插件提供item
,而您提供的是value
,因此您将myValueFunction(yourvalue, function(item){})
设置为插件的回调函数(以您的实际值作为参数)。它将"返回"另一个包含一个参数(项)的值的函数。
例如,如果你有一个插件:
var myValue= "x";
plugin.doSomething("Plugin Argument", myValueFunction(myValue, function(item){
console.log(item, value);
}));
这基本上就是georg的答案(他的方法更通用),但他的方法在性能方面会比直接定义这些函数慢得多,尤其是当你开始添加许多参数时。
您可以从这里使用函数.部分实现:
Function.prototype.partial = function(){
var fn = this, args = Array.prototype.slice.call(arguments);
return function(){
var arg = 0;
for ( var i = 0; i < args.length && arg < arguments.length; i++ )
if ( args[i] === undefined )
args[i] = arguments[arg++];
return fn.apply(this, args);
};
};
这样定义回调:
callback = function(item, value) { console.log(item + value) }.partial(undefined, "myValue")
现在,当您调用callback('myItem')
时,它会正确显示"myItemmyValue"
相关文章:
- 表达式引擎扩展开发-向呈现的条目添加自定义javascript
- Can用户'MediaWiki上的自定义JavaScript调用Lua模块
- 动态加载的自定义javascript/jQuery/HTML5音频播放器的问题
- 使用drupal中自定义javascript文件中的一个函数
- 行末尾未定义Javascript
- 使用浏览器在页面(客户端)上运行自定义JavaScript来模拟点击?怎么做
- 在对象中定义JavaScript获取和设置函数,而不使用“;这个“;
- 未定义Javascript文档
- 使用谷歌地图:一个返回undefined的自定义javascript函数
- target=“_空白“;使用自定义javascript生成的html页面
- Meteor:选择自定义javascript和自定义css作为模板
- 用自定义javascript全局命名空间替换窗口
- 怎么了?通过字符串定义 JavaScript 命名空间
- 为什么自定义 JavaScript 文件放在客户端文件夹中时不在我的 Meteor 模板上呈现
- 定义 JavaScript 类的局部变量
- 创建自定义 Javascript 对象的惯用方法有哪些
- 当通过选择页面上所有复选框的 jQuery 脚本选中复选框时,如何触发自定义 javascript 事件
- 我的自定义javascript旋转木马无法正常工作
- 自定义javascript日期
- 如何在联系人表单7 Wordpress中添加自定义javascript函数