$ .fn或Function.prototype

时间:2011-09-09 14:10:50

标签: jquery

我正试图让它发挥作用。

$.fn.createDelegate = function(scope){
var fn = this;
   return function() {
       return fn.apply(scope, arguments);
   }
 }

以下版本有效,但我认为它们都是一样的。第一种是写第二种的简写方式。 或许我的想法不正确。

Function.prototype.createDelegate = function(scope){
var fn = this;
   return function() {

       return fn.apply(scope, arguments);
   }
 }

当我第一次打电话给第一个时:      var delegate = this.myMethod.createDelegate(this);             setTimeout(delegate,3000);

它说不是功能。 Function.prototype的第二种方法有效。有人可以解释原因并让我直截了当。

最好将它作为一个小插件,这样就不会被一个大型项目覆盖。

2 个答案:

答案 0 :(得分:3)

分配给$.fn将为您提供jQuery对象的功能。 jQuery故意不接触原生对象的原型(这是第二个例子所做的)。如果这种代码风格吸引您,那么您可能需要查看Prototype

答案 1 :(得分:3)

$.fnjQuery.prototype的简写,用于向jQuery选择添加方法。 不是 Function.prototype的简写。但是,您可以使用内置的jQuery函数$.proxy,它可以满足您的需求。

你会做这样的事情:

var delegate = $.proxy(this.myMethod, this);
var delegate = $.proxy(this, 'myMethod'); // slightly briefer but less explicit syntax