Table of Content

在ES6当中把对象这块内容做了提升的效用.因为js中基本上所有的值,都是某些类型的对象.

 4.1 对象字面量语法的扩展

对象字面量是js中最常用的模式之一,(json就是基于这种语法.对象字面量的一个普遍性.是因为它的简洁可以少写很多不必要的代码.对 于程序员来说.能少一个字母都是好的.

在我们之前的es5当中,对象字面量必须是名/值对的组合.但是有可能属性值在被始化的时候有些重复.比如

function creFn(name,age){
    return {
        name:name,
        age:age
    }
}

以上属性名和参数名相同,这个结果重复了name和age.在返回的值当中.左边的name是名 右边是值.然后右边的name赋值给了左边的name.

哪么在ES6中.可以更加简洁.比如:

function creFn(name,age){
    return {
        name,
        age
    }
}

当对象中的字面量中的属性只有名称时,js解释器会在周边作用域查找同名的变量.如果找到了,就会把值赋值给同名的属性.

4.2 方法简写

ES6改进了为对象字面量的方法赋值的语法.在早期ES5之前.我们必须指定一个名称并且完整的函数定义来为对象添加方法,比如:

var obj = {
    run:function(){
        return 'hello world'
    }
}

哪么通过es6可以更简洁.比如:

var obj = {
    run(){
        return 'hello world'
    }
}

以上这个案例具有和ES5方法的所有的相同特征和能力,唯一的区别是简写的方法不能使用super,

4.3 需要计算的属性名

需要计算的属性名.其实是在ES5或更加的版本.用于对象实例.只要用方括号表示法来代替小数点表示法就可以.

比如:

var obj = {
    "first name":"虎虎"
}
var lastName = 'last name';
obj["first name"] = '虎';
obj[lastName] = '李';

console.log(obj["first name"])
console.log(obj[lastName])

var lastName = 'lastName';
var obj = {
    "first name":"虎虎",
    [lastName]:"李"
}

console.log(obj["first name"])
console.log(obj[lastName])

// 对象字面量中的方括表示这个属性名需要被计算/其实是一个字符串.也就是说其中可以包含表达式

var su = ' name';
var obj = {
    ["first" + su]:'虎',
    ["last" + su]:'李'
}

console.log(obj["first name"])
console.log(obj['last name'])

4.4 重复的对象字面的属性

ES5的严格模式为重复的字面量引入一个检查.如果重复的属性名.就会报错.

var obj = {
    name:"ddd",
    name:"cccc"   //在es5环境中 strict 模式下不允许一个属性有多个定义 会报错.可以打开IE浏览器进行测试
}

console.log(obj.name)

以上,在ES5严格模式下.第二个name会造成语法错误.,但是在ES6当中移除了重复性的检查.严格和非严格都不在检查.如果存在后面的值就是实际的值.

4.5 正式的方法定义

在ES6之前,方法这个概念在js当中是不存在的.其实叫法是引用了其它语言的叫法,在es6作出了一个正式的定义:方法是一个有homeobject内部属性的函数.此内部属性指向当前方法所属于的对象,比如:

let obj = {
   //这个写法叫方法
   getColor(){
      return 'blue'
   }
}
以下这个写法不是方法.是函数
function getColor(){
    return 'blue'
}

总结

对象是Javascript 编程的中心.做了一些直接的改进.变的更加的强大.主要的改进有,速记法属性定义可以更容易的把作用域内的变量赋值给对象的同名属性;允许被计算,方法的简单写可以省略冒号和function关键字.放弃了同名检查.也就是说我们可以在对象字面量中写两个同名属性值.而不会报错.

Leave a Reply

Your email address will not be published.