标签:
ECMAScript6将大量精力聚焦在提升对象的实用性性上。聚焦的意义在于JavaScript中几乎每一个值是由对象中的某种类型表示。此外,在一个普通的JavaScript程序中使用对象的数量持续增长,这个意味着开发人员总是在写更多的对象。随着对象越来越多,更高效地使用它们就很有必要了。
ECMAScript在很多方式上提升了对象。从简单的语法到对象操纵和交互的新方式。
ECMAScript6规范引入了一些新的术语来帮助区分对象之间的类别。javascript曾长期充斥着用来描述标准中找到的相对于那些通过执行环境如浏览器添加的对象的混合术语。ECMAScript6花时间清楚定义了对象的各个类别,理解这个术语以对这门语言有一个整体的理解是很重要的。对象类别有:
Array
, Date等。标准对象可能是普通或外来对象。
这些术语在全书中使用,解释ECMAScript6中定义的对象变化。
JavaScript中最流行的模式之一是对象字面量。JSON是建立在它的语法之上,且几乎可以在网络上的任何一个JavaScript文件中看到它。流行的原因很清楚:创建对象的简洁语法,否则要花费几行代码来完成。ECMAScript承认了对象字面量的流行,且在几个方面扩展了语法,使得对象字面量更强大甚至更简洁。
属性初始化简写
在ECMAScript5及更早版本,对象字面量是简单的键值对集合。这意味着当属性值被初始化时可能会有一些重复。比如:
function createPerson(name, age) { return { name: name, age: age }; }
createPerson()函数创建了一个属性名与函数参数名一样的对象,结果就是name和age重复出现,尽管它们每一个表示过程的不同方面。
在ECMAScript中,你可以通过使用属性初始化简写消除存在于属性名和本地变量之间的重复。当属性名与本地变量名相同时,你可以简单的包括名字,而不需要冒号和值。比如:createPerson()可以被重写如下:
function createPerson(name, age) { return { name, age }; }
当一个对象字面量中的属性只有名字而没有值,JavaScript引擎在周围查找同名的变量。如果找到,那个值就分配给对象字面上同名的属性。所以在此例中,对象字面量属性name被分配了本地变量name的值。
这一扩展的目的是时对象字面量的初始化比原来更简单。分配一个与本地变量同名的属性在JavaScript中是非常普遍的模式,所以这个扩展是很值得欢迎的。
ECMAScript6也改进了对象字面量分配方法的语法。在ECMAScript5及更早,你在给对象添加方法时必须指定一个名字和完整的函数定义。比如:
var person = { name: "Nicholas", sayName: function() { console.log(this.name); } };
在ECMAScript6中,通过消除冒号和function关键字,使得这一语法更加简洁。然后你可以重写之前的例子如下:
var person = { name: "Nicholas", sayName() { console.log(this.name); } };
正如之前的例子所做的一样,这一简写语法在person对象上创建了一个方法。除了为你节省一些按键外并没有区别,所以 sayName()被分配了一个匿名函数表达式,拥有前一例子中定义的函数的同样的特性。
注意:使用这一简写创建的方法的name属性是在括号之前使用的名字。前一例子中person.sayName()
的name属性是 "sayName"。
JavaScript在使用方括号代替点符号中长期有计算后的属性名称。方括号允许你使用可能包含作为标识符使用会是一个语法错误的字符的变量和字符串字面量指定属性名称。比如:
var person = {}, lastName = "last name"; person["first name"] = "Nicholas"; person[lastName] = "Zakas"; console.log(person["first name"]); // "Nicholas" console.log(person[lastName]); // "Zakas"
这个例子中,两个属性名都有一个空格,我们不可能使用点符号引用这些名字。然而,方括号允许任何字符串作为属性名。
在ECMAScript5中,你可以在对象字面量中使用字符串字面量作为属性名,比如:
var person = { "first name": "Nicholas" }; console.log(person["first name"]); // "Nicholas"
//to be continue
[译]Understanding ECMAScript6 对象
标签:
原文地址:http://www.cnblogs.com/qianlegeqian/p/4283651.html