Function.extend({
    create : function(options)
    {
        var fn = this;            
        options = utils.merge({
            'bind':fn,
            'delay':false,
            'arguments':null,
            'periodical':false,
            'attempt':false
        },options);   //把 {} 和  options的属性绑定到   options上。 utils.merge()的返回值是一对象。   
        if($chk(options.arguments) && utils.getType(options.arguments) != 'array')options.arguments = [options.arguments];//这里 $chk 不知道是干什么的, 我猜是 判断是否存在。  加起来就是:options.arguments存在并不是数组,则把options.arguments变为数组。
        return function()
        {
            var args = options.arguments || arguments;//取options.arguments 和函数自己的参数||。
            var returns = function(){return fn.apply($pick(options.bind,fn),args);}; //这里的Fn LZ  应该没有给出来(一个函数)。  
            if(options.delay)return setTimeout(returns,options.delay);//根据给定参数是逻辑判断。
            if(options.periodical)return setInterval(returns,options.periodical);
            if(options.attempt){try{return returns();}catch(err){return false;};}
            return returns();//返回fn的函数执行结果。
        }
    }
    })

解决方案 »

  1.   

     var returns = function(){return fn.apply($pick(options.bind,fn),args);};   
    现在流行这么写函数吗?怎么现在都这样写啊?
      

  2.   

    LZ的代码看得眼熟,mootools?用多几次就慢慢理解了,create函数基本上就是返回函数本身,然后根据绑定的属性,做一些想做的事,你可以无限扩展属性,考虑以下例子
     
    var o4 = function(){
       alert('hello world')
     }.create({delay:1000})() //延迟1秒输出'hello world'
      

  3.   


    http://www.i170.com/user/voidarea/Article_91969