ES6允许直接写入变量和函数作为对象的属性和方法。意思就是说允许在对象中只写属性名,不用写属性值。这时,属性值等于属性名称所代表的变量。下面分别举一个例子来说明:
<强>属性:强>
函数getPoint () { var x=1; var y=2; 返回{x, y} }
等同于
因数getPoint (x, y) { var x=1; var y=2; 返回{x, x, y, y} }
测试:
getPoint ();//{x: 1, y: 10}
<强>函数:强>
var obj={ 有趣的(){ 返回“简单函数”; }};
等同于
var obj={ 乐趣:函数(){ 返回“简单函数”; } }
测试:
obj.fun();//简单函数
ES6里允许定义对象的时候用表达式作为对象的属性名或者方法名,即把表达式放在方括号里。
<强>属性强>
让propKey=癴oo”; 让obj={ [propKey]:没错, (“a”+“公元前”):123 }
测试:
obj.foo;//正确的 obj。美国广播公司(abc);//123
<强>方法强>
让obj={ [' h ' + '嗨'](){ 返回“hello world”; } }
测试:
obj.hello ();//hello world
属性名表达式与简介表达式不能同时使用。
//错误的 var foo='酒吧'; var酒吧=' abc '; var巴兹={(foo)};//正确 var foo='酒吧'; var巴兹={(foo):“abc”}
这个比较容易理解,直接阐述文字。
函数的名字属性返回函数名。对象方法也是函数,因此也有函数名。
-
<李>一般情况方法的名字属性返回函数名李>
<李>如果是取值函数会在函数名前加“获得”李>
<李>如果是存值函数会在函数名前加“套”李>
<李>如果绑定方法创建的函数会在函数名前加“绑定”李>
<李>如果是函数构造函数创建的函数,会在函数名前加“匿名”李>
<李>如果对象的方法是一个符号值,那么名字属性返回的是这个符号值的描述*
李>
<代码> Object.is() 代码>用来比较两个值严'ge严格相等。与严格比价运算符(===)的行为基本一致。不同之处只有两个:一是+ 0不等于0,二是南等于自身
+ 0===0//真实的 南===南//假的 Object.is(+ 0,0);//假的 Object.is(南南);//真正的
<代码> Object.assign() 代码>方法是用于将源对象的可枚举属性复制到目标对象。它至少需要两个参数,第一是目标对象,后面的全是源对象。
-
<李>每个参数必须是对象,否则会报TypeError错误。李>
<李>如果目标对象与源对象有同名属性,或多个源对象有同名的属性,则后面的属性会覆盖前面的属性李>
<李> <代码> Object.assign> 代码只复制自身属性,不可枚举的属性和继承属性不会被复制李>
<李>属性名值为象征的属性,也会被Object.assign复制。
李>
<强>演示:强>
var目标={1,b: 2}; var source1={: 2, c: 5}; var source2={: 3 d: 6}; Object.assign(目标、source1 source2); 目标//{3 b: 2, c: 5 d: 6}
<代码> Object.assign> 代码可用于处理数组,但是会将其视为对象
Object.assign ([1, 2, 3], [4,5]);//(4、5、3)
<强>其他用处强>
-
<李>为对象添加属性李>
<李>为对象添加方法李>
<李>克隆对象李>
<李>合并多个对象李>
<李>为属性指定默认值
李>
对象的没个属性都有一个描述对象(描述符),可通过<代码> Object.getOwnPropertyDescriptor(对象、道具)> 代码,对象表示对象,道具表示对象的里的一个属性,用的时候需要加上引号。描述对象里面有个可列举的(可枚举性)属性,来描述该属性是否可枚举。