从 ES5 开始,您已经能够使用Object.defineProperty定义 getter 和 setter 。您的 ES6 代码本质上是以下 ES5 代码的语法糖:
function Job ( ) {
this.start = new Date;
}
Object.defineProperty( Job.prototype, 'age', {
get: function ( ) { return new Date - this.start; }
} );
在此之前,一些引擎对 getter 具有非标准支持,例如Object.prototype.__defineGetter__,它可以像这样用于复制您的功能:
Job.prototype.__defineGetter__( 'age', function ( ) {
return new Date - this.start;
} );
SpiderMonkey 还有一些其他的方法可以更早地做到这一点:
Job.prototype.age getter = function() {
return new Date - this.start;
};
// or, this one, which declares age as a variable in the local scope that acts like a getter
getter function age() { ... };
这些方法今天都不应该使用,除了Object.defineProperty
在 ES6 中仍然非常有用的方法。