ES6

2016-08-15 16 views
1
ES6で

ゲッターメソッドでは、既存のgetterメソッドのES6が(代わりにobj.method(..)obj.methodを呼び出す)属性として呼び出されるメソッド&として定義される前に、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 *と呼ばれるのではなく、「プロパティ」と呼ばれます。 –

+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() { ... }; 

なしを除いて、今日使用すべきではありませんはまだES6で非常に便利です。

+1

そして、構文はES5のオブジェクトリテラルでも利用できました! – loganfsmyth

1

オブジェクトの各プロパティには、Getter関数とSetter関数があります。あなたのES6コードで

var obj = {}; 

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

を:あなたは、新しいプロパティを定義し、その値を取得および設定するときに使用する機能する伝えることができるオブジェクトを作成するとMDN - Object.defineProperty()

: あなたはここに完全なドキュメントを見つけることができますあなたがやっていることは新しいコンストラクタ関数を定義してからageのためにgetを定義することです。