首页 教程 API文档

对象扩展

2015-09-09 14:05:21

属性


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

描述


Std.extend方法用于对一个Object进行扩展,将一个指定的Object对象合并到另一个Object对象中,并且最后会将这个被扩展的对象作为返回值返回.
提示: 通常情况下,建议使用type值为0(默认)的参数,使用深度扩展时候,性能开销会随之提升数倍

语法



Std.extend(Object source,Object data,Number type=0,Boolean cover=true);
        

参数


名称 类型 描述
source Object,Function 被扩展的源对象,可以是一个Object对象或者是一个函数
data Object 需要合并到源对象中的另一个对象
type Number

合并的类型,可以有以下取值

参数 描述
0 遍历data下所有键值,并且写入source对象,如果source已经存在该键,则覆盖写入,如果cover参数为false,则跳过
1 遍历data下所有键值,如果source 与 data 的存在相同的键,并且值的类型都为数组时候,那么将data数组的内容合并到source的数组中.
2 深度扩展,也就是如果source 与 data 存在相同的键,并且类型都是一个对象的时候,那么data的所有键将会被递归扩展到source键中.
3 深度扩展,与2相同,但额外增加了数组判断,同时拥有类型1与类型2的功能,其中会对数组进行递归,也会对对象进行递归
cover Boolean 是否覆盖已经存在的键,如果设置为false,那么如果当前对象里已经存在该键值,就跳过,不会覆盖(该选项仅对type为0时生效)

返回值


返回source对象,通常都不需要返回值,因为在扩展之后,第source参数已经被改变了

相关例子


例子1(type值为0)


var source = {
    a:1,
    b:2
};
var data = {
    c:3,
    b:4
};
Std.extend(source,data);

//执行结果,其中source.b 的值被 data.b 覆盖了
{
    a:1,
    b:4,
    c:3
}
        

例子2(type值为0,cover设置为false)


var source = {
    a:1,
    b:2
};
var data = {
    c:3,
    b:4
};
Std.extend(source,data,0,false);

//执行结果
{
    a:1,
    b:2,
    c:3
}
        

例子3(type值为1)


var source = {
    a:1,
    b:["a","b"]
};
var data = {
    b:["c","d"],
    c:2
};
Std.extend(source,data,1)

//执行结果
{
    a:1,
    b:["a","b","c","d"],
    c:2
}
        

例子4(type值为2,深度扩展)


var source = {
    a:1,
    b:{
        b1:1,
        b2:{
            b2_1:1
        }
    }
};
var data = {
    b:{
        b1:2,
        b2:{
            b2_2:2
        }
    },
    c:2
}
Std.extend(source,data,2);

//执行结果
{
    a:1,
    b:{
        b1:2,
        b2:{
            b2_1:1,
            b2_2:2
        }
    },
    c:2
}
        

例子5(type值为3,深度扩展)


var source = {
    a:1,
    b:{
        b1:1,
        b2:{
            b2_1:1
        },
        b3:[1,2]
    }
};
var data = {
    b:{
        b1:2,
        b2:{
            b2_2:2
        },
        b3:[3,4]
    },
    c:2
}
Std.extend(source,data,3);

//执行结果
{
    a:1,
    b:{
        b1:2,
        b2:{
            b2_1:1,
            b2_2:2
        },
        b3:[1,2,3,4]
    },
    c:2
}