Javascript ES6中存在的getter方法在ES6之前的替代方案是什么
ES6中的Getter方法定义为方法并称为属性(调用Javascript ES6中存在的getter方法在ES6之前的替代方案是什么,javascript,ecmascript-6,getter,es5-shim,Javascript,Ecmascript 6,Getter,Es5 Shim,ES6中的Getter方法定义为方法并称为属性(调用obj.method,而不是obj.method(…)) 例如: class Job { constructor(){ this.start=new Date(); } get age(){ return new Date()-this.start; } } 然后: var vm=new Job(); //.... vm.age // call Getter method
obj.method
,而不是obj.method(…)
)
例如:
class Job {
constructor(){
this.start=new Date();
}
get age(){
return new Date()-this.start;
}
}
然后:
var vm=new Job();
//....
vm.age // call Getter method
我的问题是:ES6之前的替代方案是什么,如果有的话?自ES5以来,您已经能够使用定义getter和setter了。您的ES6代码本质上是以下ES5代码的语法糖:
function Job ( ) {
this.start = new Date;
}
Object.defineProperty( Job.prototype, 'age', {
get: function ( ) { return new Date - this.start; }
} );
在此之前,有些引擎对getter提供了非标准支持,例如,可以这样使用getter来复制您的功能:
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() { ... };
除了在ES6中仍然非常有用的
Object.defineProperty
之外,这些方法现在都不应该使用。因为ES5对象的每个属性都有一个Getter和Setter函数。
您可以在此处找到完整的文档:
创建对象时,可以定义新特性,并告知获取和设置该值时要使用哪些函数:
var obj = {};
Object.defineProperty( obj, 'propName', {
get: function() { return 42; },
set: function(newValue){ this.propName = newValue; }
});
在ES6代码中,您要做的是定义一个新的构造函数,然后为
年龄定义get
ter ES5中的对象文本也可以使用语法!不是方法,也不是作为属性调用,而是“称为属性”。@torazaburo:删除了太多的空白;)