Underscore: _.wrap不支持带参数的包装功能

创建于 2013-03-09  ·  8评论  ·  资料来源: jashkenas/underscore

今天,在使用下划线和主干编写代码时,我不得不包装一些功能。 我在underscorejs.org上看到了以下示例

var hello = function(name){返回“ hello:” +名称; };
你好= _.wrap(你好,函数(func){
返回“ before,” + func(“ moe”)+“,after”;
});
你好();
=>'之前,你好:萌,之后'

在倒数第二行
如果函数调用就像
你好(“ umar”);
我的意思是说争论来自外部。

question

所有8条评论

Wrap已经为您解决了大部分此类问题。 包装的源很短,无法通读。 您可以在下面的扩展示例中进行操作:

var greet = function(name, language){
  var response
  if (language === "sp") {
    response = "Hola"
  } else if (language === "fr") {
    response = "Bonjour"
  } else {
    response = "Hello"
  }
  return response + " " + name
}
greet("Ted", "fr"); // => "Bonjour Ted"
greet = _.wrap(greet, function(old_greet, lang){ return old_greet("Ted", lang); } );
greet("sp"); // => "Hola Ted"

感谢您的快速回复。 这非常有帮助。
我正在使用骨干开发企业应用程序。
view.js
var view = Backbone.View.extend({

authorizeCreateAction:function(){
//这里“ this”指向查看
this.createAlert:_.wrap(this.createAlert,function(_createAlert,_type){
//授权创建动作
返回_createAlert(_type);
});
},
createAlert:函数(类型){
//问题:
//这里的“ this”指向[window global]
}
});
当我直接调用createAlert函数时,它在createAlert函数内部看到,它指向视图,但是当我编写包装函数时,它开始指向[window global]
我想更改其引用以指向“视图”

我是下划线的新手,如果问题无关紧要,请忽略。
BTW下划线很棒

您需要使用如下上下文调用_createAlert 。 希望能有所帮助。 :)

return _createAlert.call(this, _type);

下划线_wrap似乎仅支持一个参数,请改用此参数:

fn =(function(fn,before,after,self){
return function(){
if(before)before.apply(self,arguments);
var res = fn.apply(self,arguments);
if(after)after.apply(self,arguments);
返回资源;
}
})(fn,在此之前,之后)

您也可以为该zarehb使用partial

tnx megawac,partial更多用于预填充参数而不调用before和after函数

包装是通过_.partial fyi实现的

fn = _.partial(function(fn, before, after, self) {
    var args = _.rest(arguments, 4);
    if (before) before.apply(self,args);
    var res = fn.apply(self,args);
    if (after) after.apply(self,args);
    return res;
})(fn, before, after, this )

没错,它可以正常工作,但是如果有人希望使用纯js解决方案,可以特别考虑下划线在这种情况下不会给您带来任何好处!

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

zackschuster picture zackschuster  ·  5评论

acl0056 picture acl0056  ·  5评论

arieljake picture arieljake  ·  4评论

sky0014 picture sky0014  ·  8评论

jdalton picture jdalton  ·  4评论