Function.methodize - Prototype JavaScript 框架

Xunxin Prototype API

methodize

someFunction.methodize() -> Function

将原始函数方法化,返回一个新的函数,调用新函数时,实质是将原始函数的第一个参数设置为当前 this 所指向的对象,然后调用原始函数。

methodize 方法对原始函数进行转换,当调用时将原函数中第一个显式的参数设置为 this(当前上下文),成为一个隐含参数。它常用于转换一个函数作为对象或对象原型(prototype 属性)的方法,并简化函数的签名。

样例

// 从一个直接操作目标对象的简单函数开始:
var fn = function(target, foo) { 
	target.value = foo; 
};
var object = {}; 

// 使用原始函数
fn(object, 'bar'); 
object.value 
//-> 'bar' 

// 将 fn 方法化并赋给对象,它就变成对象的一个方法,这时只有一个参数: 
object.fnMethodized = fn.methodize(); 
object.fnMethodized('boom!');
object.value 
//-> 'boom!' 

当然,样例中的用法并不常见。更常见的用法是复制已方法化的函数给对象的原型(prototype 属性), 以便新的方法可以立即在对象实例间共享。在 Prototype 库中,methodize 在 DOM 和事件模块中有着重要的应用:Element.MethodsEvent.Methods 就是通过方法化后再放入它们原生的 prototype 属性中的,以便在 DOM 节点和事件对象中使用。

译注:想一下 Event.observe('inputId', 'click', handler)$('inputId').observe('click', handler) 是如何转换的,是不是有一种恍然大悟的感觉呢?

var input = document.getElementById('inputId');
input.observe = Event.observe.methodize();
input.observe('click', handler);