使用频率 | 非常高 |
复杂程度 | 中低 |
成员类型 | 静态函数 |
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 |
该选项可以是一个数组或对象,该选项决定着是否遍历函数的首个参数,可接受以下类型:
写法为 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对象,否则,就返回函数体所返回的值.
Std.func(false);
//以上代码将会返回一个函数
function(){return false};
Std.func();
//以上代码将会返回一个空函数
function(){};
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;
}
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;
}
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;
}
var func1 = Std.func(function(){
//do something..
},{
delay:2000
})
var func1 = Std.func(function(){
Std.ui("MessageBox",{
text:"information text"
})
},{
packages:["ui.MessageBox","plugin.smoothWheel"]
});