wrap
1.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"