3

ES6 のゲッター メソッドは METHOD として定義され、ATTRIBUTE として呼び出されます (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より前の代替手段は何ですか?

4

2 に答える 2

7

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__などの非標準の 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() { ... };

Object.definePropertyこれらの方法は、ES6 でまだ非常に有用であることを除いて、今日使用するべきではありません。

于 2016-08-15T18:07:14.800 に答える