ECMAScript 6 and Method Definitions 方法定义
03 April 2013
在任何严肃的 JavaScript 应用程序中,使用含有一些成员函数的对象字面量是一种常见的做法。这种做法对所有类型的框架也是非常有用的,特别是建立对象原型。即将到来的 ECMAScript 6 引入了方法定义,一种非常好的简写方式,使用这种模式可以消除对 function
的需要。
在查看方法定义之前,我们先快速回顾一下属性 setter 和 getter。这是当前 ECMAScript 5.1 的一部分,请参见 11.1.5 节 的对象初始化。总的思想是使用 set
和 get
将一个对象属性绑定到一个函数,当时属性被设置或读取时函数被调用。下面的代码片段演示了这种用法:
var BigLoco = {
locoName: 'Gordon',
get name() { return this.locoName; },
set name(n) { this.locoName = n }
};
console.log(BigLoco.name); // 'Gordon'
实际上,我们有办法定义一个函数而不使用关键字 function
。在 ECMAScript 6 中,这种语法被进一步扩展,不只适用于属性的 getter 和 setter,也适用于普通函数。这种语法被称为方法定义,请参见最新的 ES6 草案 的 13.3 节。
看一看这里的 ECMAScript 6 代码示例,特别是 start
和 stop
函数。
var SteamEngine = {
color: 'blue',
get name() { return 'Thomas' },
start() { console.log('Hurry up!'); },
stop() { console.log('Screech...! That was close.'); }
};
console.log('My name is', SteamEngine.name);
SteamEngine.start();
SteamEngine.stop();
如果我们想要把这段代码转换为 ES5,结构会看起来像这样:
var SteamEngine = {
color: 'blue',
get name() { return 'Thomas' },
start: function() { console.log('Hurry up!'); },
stop: function() { console.log('Screech...! That was close.'); }
};
ECMAScript 6 对于这一语法糖显示出了良好的对称性。对象字面量中的每个属性看起来一样,并且由于必要的括号不难识别出其中的函数。
blog comments powered by Disqus