您的位置:首页 > 移动开发 > Objective-C

JS中的Object.assign()、Object.create()、Object.defineProperty()

2016-10-24 20:25 951 查看

1. Object.assign()

首先看一下函数的定义:

  函数参数为一个目标对象(该对象作为最终的返回值),源对象(此处可以为任意多个)。通过调用该函数可以拷贝所有可被枚举的自有属性值到目标对象中。

Object.assign(target, …sources)

这里我们需要强调的三点是:

可被枚举的属性:

在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的。可枚举性决定了这个属性能否被for…in查找遍历到。

js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等,如果你写出这样的代码使用
for...in
遍历其中的属性,将会什么都不会发生,不会报错,能够继续往下执行,看起来就是直接跳过去了。

如果对象不可枚举,则方法
for…in
JSON.stringify()
Object.keys()
都会失效。

自有属性:

区别于原型属性,不是从原型链继承而来的,例如:

function Obj () {

this.z = 3; //自有属性

}

//对象会继承原型里的属性

Obj.prototype.x = 1;//非自有属性

Obj.prototype.y = 2;//非自有属性

string或者Symbol类型,可以被直接分配

示例一:

var o1 = { a: 1 };
var o2 = { b: 2 };
var o3 = { c: 3 };

var obj = Object.assign(o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
console.log(o1);  // { a: 1, b: 2, c: 3 }, target object itself is changed.


  此例子表明,
Object.assign
不仅返回一个新拼接出来的值,同时也会改变第一个参数(target)的值。

var obj = Object.create({ foo: 1 }, { // foo is an inherit property.
bar: {
value: 2  // bar is a non-enumerable property.
},
baz: {
value: 3,
enumerable: true  // baz is an own enumerable property.
}
});

var copy = Object.assign({}, obj);
console.log(copy); // { baz: 3 }


  这个例子中,因为对象obj是使用
Ob
4000
ject.create()
构造,所以
{foo:1}
是obj继承的原型,obj中的第二个属性显式声明为可枚举,所以最后
copy
中拷贝过去的属性只有
baz


2. Object.create()

  
Object.create(proto [, propertiesObject ])
是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不是一个子函数,可以传一个null,第二个参数是对象的属性描述符,这个参数是可选的。

function Car (desc) {
this.desc = desc;
this.color = "red";
}

Car.prototype = {
getInfo: function() {
return 'A ' + this.color + ' ' + this.desc + '.';
}
};
//instantiate object using the constructor function
var car =  Object.create(Car.prototype);
car.color = "blue";
alert(car.getInfo());


数据属性

writable:是否可任意写

configurable:是否能够删除,是否能够被修改

enumerable:是否能用 for in 枚举

value:值

访问属性:

get(): 访问

set(): 设置

newObj = Object.create(obj,{
t1:{
value:'yupeng',
writable:true
},
bar: {
configurable: false,
get: function() { return bar; },
set: function(value) { bar=value }
}

})


3. Object.defineProperty()

详细见于这里
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: