wrap1.6.0
wrap(wrapperFunction[, arg...]) -> Function
将原始函数封装到参数 wrapperFunction
表示的函数中,返回一个新的函数。调用新函数时,
实质是将 wrapperFunction
函数的第一个参数设置为绑定了当前 this
对象的原始函数,然后再调用 wrapperFunction
函数。
Function#wrap
体现了
面向方面的程序设计 的本质,让你能够轻松的为已有的函数指定调用前和调用后的行为,改变返回的结果,
甚至还可以阻止对原始函数的调用。
样例
String.prototype.capitalize = String.prototype.capitalize.wrap(
function(proceed, eachWord) {
if (eachWord && this.include(" ")) {
// 将字符串中每一个单词的首字母大写
return this.split(" ").invoke("capitalize").join(" ");
}
else {
// 使用原始函数处理
return proceed();
}
}
);
"hello world".capitalize()
// "Hello world"
"hello world".capitalize(true)
// "Hello World"