これはES 2015のクラスを使用して簡単です:
ここ
class Foo {
constructor() {
this._bar = null;
}
get bar() {
doStuff();
return this._bar;
}
set bar (val) {
doOtherStuff();
this._bar = val;
return this;
}
};
var foo = new Foo();
foo.bar = 3; // calls setter function
console.log(foo.bar); // calls getter function
はバベルから(簡体字)出力です:これはただのクラスのためではないことを
var Foo = function() {
function Foo() {
this._bar = null;
}
_createClass(Foo, [{
key: "bar",
get: function get() {
doStuff();
return this._bar;
},
set: function set(val) {
doOtherStuff();
this._bar = val;
return this;
}
}]);
return Foo;
}();
注意、任意のオブジェクトを持つことができますこれら:
var baz = {
get qux() {
// arbitrary code
},
set qux(val) {
// arbitrary code
}
};
Source.
Proxy
がpolyfilledすることができないよう何をしたいEDIT
は、可能性だけネイティブES 6の環境です。
var getter = function(target, property, proxy) {
console.log(`Getting the ${property} property of the obj.`);
return target[property];
};
var setter = function(target, property, value, proxy) {
console.log(`Setting the ${property} property to ${value}.`);
target[property] = value;
};
var emptyObj = {};
var obj = new Proxy(emptyObj, {
get: getter,
set: setter
});
obj.a = 3; // logs 'Setting the a property to 3'
var foo = obj.a; // logs 'Getting the a property of the obj'
私はすでにそれをすべて知っています。物事はダイナミクスであるということです。 'foo.bar'が' foo.get( 'bar') 'を呼び出し、' foo.baz'が 'foo.get( 'baz')'を呼び出したいとします。 –
@NicolasBoisvertが更新されました。その可能性はありますが、移植性はまだありません。 –