首页 教程 API文档

增强版函数创建

2015-09-22 16:00:00

属性


使用频率 非常高
复杂程度 中低
成员类型 静态函数

描述


Std.func方法用于创建一个拥有特殊功能的增强版函数,这个函数可以在创建的时候传递一个参数选项来决定该函数拥有哪些特性.

如果执行Std.func的时候没有传递任何参数,那么将会返回一个新的空函数.

如果传递的参数是一个Boolean的值,那么将会返回一个新的函数,这个新的函数返回值会是这个Boolean值.

例如:可以通过配置参数选项选项实现特殊功能,例如:遍历,继承,延迟执行等.

语法



Function Std.func();
Function Std.func(Boolean result);
Function Std.func(Function handle);
Function Std.func(Function handle,Object option);
        

参数


名称 类型 描述
result Boolean 函数需要返回的值
handle Function 需要执行的函数主体
option Object 用于配置函数的参数选项

参数选项


名称 类型 默认值 描述
each Array null

该选项可以是一个数组或对象,该选项决定着是否遍历函数的首个参数,可接受以下类型:

类型 取值
数组 Array,isArray,"array"
对象 object,isObject,"object"
字符串 String,isString,"string"

写法为 each:[isArray,isObject] 或者 each:{isArray:true,isObject:true}

split String ' ' 当each选项中允许遍历字符串,那么这个参数的作用就是把这个参数作为字符串分割的条件,默认为空格
parent Function null 父函数,可以设置为一个函数,也可以设置为一个包含多个函数的数组,当该选项为数组时候, 将会继承数组里所有函数的功能,在函数执行时候,首先将会执行父函数(注意:该功能不是原型链继承)
delay Number null 函数延迟指定毫秒后执行,需要注意的是,一旦配置该参数,函数的返回值将会变成this对象,而忽略本身的返回值
chaining Boolean true

使函数支持链式操作,意味着如果函数没有返回值,或者返回值为undefined的时候,那么函数将会返回this对象.

如果该值设置为false,那么函数将会和普通函数一样进行返回.

packages String,Array null

在函数执行的时候,会首先把packages中设置的包从sourceRepository中载入完成之后才会开始执行函数本身, 如果packages中设置的包载入失败了,那么函数将不会被执行.

如果配置了packages选项,并且chaining参数设置为false的时候,那么该函数将不会有返回值.

关于sourceRepository可以参考Std.sourceRepository模块文档

返回值


1. 外壳方法,返回一个空函数

2. 外壳方法,返回一个Boolean值

3. 当执行函数体内没有任何返回值或者返回的是一个 undefined 值并且函数的 chaining 选项为true的时候,那么函数就返回this对象,否则,就返回函数体所返回的值.

相关例子


例子1:


Std.func(false);
//以上代码将会返回一个函数
function(){return false};
        

例子2:


Std.func();
//以上代码将会返回一个空函数
function(){};
        

例子3,创建可遍历数组的函数


var func1 = Std.func(function(name,other){
    alert(name + ":" + other);
},{
    each:[isArray]
    /*
    *  也可以写成  each:[Array] 或者 each:["array"] 或者 each:{array:true}
    */
});

//上面这段代码就相当于下面这段代码
var func1 = function(name,other){
    if(isArray(name)){
        for(var i=0,length=name.length;i<length;i++){
            alert(name + ":" + other);
        }
    }else{
        alert(name + ":" + other);
    }
    return this;
}
        

例子4,创建可遍历对象的函数


var func1 = Std.func(function(name,value){
    alert(name + ":" + value);
},{
    each:[isObject]
    /*
    *  也可以写成  each:[Object] 或者 each:["object"] 或者 each:{object:true}
    */
});

//上面这段代码就相当于下面这段代码
var func1 = function(name,value){
    if(isObject(name)){
        for(var keyName in name){
            alert(keyName + ":" + name[keyName]);
        }
    }else{
        alert(name + ":" + value);
    }
    return this;
}

        

例子5,创建可遍历数组,对象的函数


var func1 = Std.func(function(name,value){
    alert(name + ":" + value);
},{
    each:[isArray,isObject]
});

//上面这段代码就相当于下面这段代码
var func1 = function(name,value){
    if(isArray(name)){
        for(var i=0,length=name.length;i<length;i++){
            func1.call(this,name[i]);
        }
    }
    if(isObject(name)){
        for(var keyName in name){
            alert(keyName + ":" + name[keyName]);
        }
    }else{
        alert(name + ":" + value);
    }
    return this;
}
        

例子6,创建一个延迟执行的函数


var func1 = Std.func(function(){
    //do something..
},{
    delay:2000
})
        

例子7,创建一个函数,在执行函数之前先自动载入包 ui.MessageBox与包 plugin.smoothWheel


var func1 = Std.func(function(){
    Std.ui("MessageBox",{
        text:"information text"
    })
},{
    packages:["ui.MessageBox","plugin.smoothWheel"]
});