2017-01-07 12 views
6

実際にES6クラス定義のゲッタとセッタメソッドは何ですか?彼らは実際にプロトタイプの小道具ですか?例:実際にES6クラスのゲッターとセッターは何ですか?

class Person{ 
    constructor(){}; 
    get name(){ 
    return 'jack'; 
    } 
    set name(){ 
    // ??? 
    } 
} 

これはPerson.prototype.name = 'jack'と同じですか。

と別の質問は、私が見たように、インスタンスの小道具を利用セッターの例VEの:何ができるか

class Person{ 
    constructor(){}; 
    get name(){ 
    return 'jack'; 
    } 
    set name(val){ 
    // like this 
    // name = val; 
    } 
} 

class Person{ 
    constructor(){ 
    this._name = 'jack'; 
    }; 
    get name(){ 
    return this._name; 
    } 
    set name(val){ 
    this._name = val; 
    } 
} 

私はしたいが、この方法を行ういけないし、私のような何かをしたいです完了?

+0

HTTPSであるため、プロパティx.name を読んカント://developer.mozilla。 org/en-US/docs/Web/JavaScript/Reference/Functions/getおよびhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set –

+0

「名前」とはあなたの最後の例では 'name = val'ですか?わかりません。達成しようとしていることを説明できますか? –

+0

[ECMAScript 6クラスのgetterとsetterは何ですか?](https://stackoverflow.com/questions/28222276/what-are-getters-and-setters-for-in-ecmascript-6-classes)の可能な複製 – Drenmi

答えて

9

はい、それは行うことができます:ちょうどセッター/ゲッター構文​​を削除し、代わりに、初期化時にクラスにプロパティを追加します。

class Person{ 
    constructor(name){ 
     this.name = name; 
    } 
} 

ゲッター/セッターの構文はに基づいて計算されなければならない性質のために存在します

class Circle { 
    constructor (radius) { 
     this.radius = radius; 
    } 
    get area() { 
     return Math.PI * this.radius * this.radius; 
    } 
    set area (n) { 
     this.radius = Math.sqrt(n/Math.PI); 
    } 
} 

それともfirstNameととPersonオブジェクトの完全な名前を取得:指定されたradiusのサークルからareaプロパティのような他の特性、 10の特性。あなたはその考えを得る。

+0

私たちはクラスが実際にプロトタイプの略語であることを知っています。コンストラクタメソッドでは、オブジェクトをインスタンス化できます。しかし、私が望むのは、プロトタイプをクラス定義内ではあるが、コンストラクターメソッドの外に定義することです。 – feiyuerenhai

+0

インスタンス固有のプロパティを使用しないで – feiyuerenhai

+1

領域設定子は 'this.radius = Math.sqrt(n/Math.PI);' – alphakevin

2

MDNごとに、get構文はオブジェクトプロパティを、そのプロパティをルックアップするときに呼び出される関数にバインドします。

ここでは、文字列 'jack'を返しています。これは、どのプロパティにもバインドされていません。 )

(Person.prototype.name)興味深いことににconsole.logはジャック

をログに記録します。しかし、我々はすなわちconstのX =新しい人(呼び出し者のインスタンスを作成したら、Person.hasOwnProperty(名)も偽

をログに記録します;

にconsole.log(x.name) - >これはエラーをスローx.hasOwnProperty(名前は)虚偽

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get

関連する問題