2016-08-15 50 views
1

getter方法被定义为METHOD &称为属性之前什么是替代(调用的obj.method代替obj.method(..)getter方法的ES6在ES6存在于ES6

实施例:

class Job { 
    constructor(){ 
     this.start=new Date(); 
    } 

    get age(){ 
     return new Date()-this.start; 
    } 
} 

然后:

var vm=new Job(); 
//.... 
vm.age // call Getter method 

我的问题是:在ES6之前有什么替代方案?

+1

不是一种方法,而不是*称为ATTRIBUTE *,而是“称为属性”。 – 2016-08-15 18:44:07

+0

@torazaburo:你删除了太多的空格;) –

回答

4

自ES5以来,您可以使用Object.defineProperty定义获取者和设置者。你ES6代码基本上以下ES5代码语法糖:

function Job () { 
    this.start = new Date; 
} 

Object.defineProperty(Job.prototype, 'age', { 
    get: function () { return new Date - this.start; } 
}); 

在此之前,一些发动机已经为干将非标准的支持,如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中仍然非常有用。

+1

ES5中的对象文字也有语法可用! – loganfsmyth

1

由于ES5对象的每个属性都具有Getter和Setter函数。 你可以找到完整的文档在这里:MDN - Object.defineProperty()

当你创建一个对象,你可以再定义一个新的属性,并告诉要使用的功能,获取和设置,当该值:

var obj = {}; 

Object.defineProperty(obj, 'propName', { 
    get: function() { return 42; }, 
    set: function(newValue){ this.propName = newValue; } 
}); 

在你ES6代码你正在做的是定义一个新的构造函数,然后为age定义get ter。