または、prop3 を = calcProp3() に設定してから関数を含める必要がありますか?
次の 2 つの選択肢があります。
getterを使用してプロパティを作成します。これは、使用すると単純なプロパティ アクセスのように見えますが、実際には関数を呼び出しています。または
関数を実行しますcalcProp3
。これにより、コーダーTest
が関数を呼び出していることが明らかになります
IE8 はゲッターをサポートしていないため、IE8 のような完全に時代遅れのブラウザーをサポートする必要がある場合は、オプション 2 が唯一のオプションです。
ゲッターの使用
ここ 2017 年には、おそらくclass
(ES2015 の [aka "ES6"] をサポートしていないブラウザーでは必要に応じてトランスパイルします) で定義するでしょうclass
:
class Test {
constructor() {
this.prop1 = 1;
this.prop2 = 2;
}
get prop3() {
return this.prop1 + this.prop2;
}
}
const t = new Test();
console.log(t.prop3); // 3
t.prop1 = 2;
console.log(t.prop3); // 4
ES5 の機能 (2009 年 12 月にリリースされた仕様、IE8 ではサポートされていません) に限定したい場合は、( spec , MDN )Test.prototype
を使用してゲッター on を定義します。Object.defineProperty
function Test() {
this.prop1 = 1;
this.prop2 = 2;
}
Object.defineProperty(Test.prototype, "prop3", {
get: function() {
return this.prop1 + this.prop2;
}
});
var t = new Test();
console.log(t.prop3); // 3
t.prop1 = 2;
console.log(t.prop3); // 4
Test.prototype
...またはgetter のオブジェクト初期化子構文を置き換えて使用する ( set を忘れないでconstructor
ください):
function Test() {
this.prop1 = 1;
this.prop2 = 2;
}
Test.prototype = {
constructor: Test,
get prop3() {
return this.prop1 + this.prop2;
}
};
var t = new Test();
console.log(t.prop3); // 3
t.prop1 = 2;
console.log(t.prop3); // 4
関数の使用
ここ 2017 年では、構文を使用してメソッドとして定義することになるでしょうclass
(古いブラウザーでは必要に応じてトランスパイルします)。
class Test {
constructor() {
this.prop1 = 1;
this.prop2 = 2;
}
calcProp3() {
return this.prop1 + this.prop2;
}
}
const t = new Test();
console.log(t.calcProp3()); // 3
t.prop1 = 2;
console.log(t.calcProp3()); // 4
古いブラウザーをサポートするために ES5 (実際にはこの場合は ES3) の機能を使い続けたい場合は、プロトタイプに関数を追加するだけです。
function Test() {
this.prop1 = 1;
this.prop2 = 2;
}
Test.prototype.calcProp3 = function calcProp3() {
return this.prop1 + this.prop2;
};
var t = new Test();
console.log(t.calcProp3()); // 3
t.prop1 = 2;
console.log(t.calcProp3()); // 4