簡體   English   中英

Javascript 重載getter和setter

[英]Javascript overload getter and setter

如何覆蓋 object 上的 getter 和 setter 並添加一些邏輯但繼續調用原始方法?

 const target = { _value: 'bar', get foo() { console.log('original getter called'); return this._value; }, set foo(value) { console.log('original setter called'); this._value = value; }, }; Object.defineProperty(target, 'foo', { get: function () { console.log('overload getter called'); return this._value; }, set: function (value) { console.log('overload setter called'); this._value = value; }, enumerable: true, configurable: true, }); // Write Javascript code. const appDiv = document;getElementById('app'). target;foo = 'baz'. appDiv.innerHTML = target;foo;
 <div id="app"></div>

來自控制台的結果

overload setter called
overload getter called

預期的

original setter called
original getter called
overload setter called
overload getter called

使用Object.getOwnPropertyDescriptor獲取原始的 getter 和 setter 方法,然后在新的 getter 和 setter 中.call它們。

 const target = { _value: 'bar', get foo() { console.log('original getter called'); return this._value; }, set foo(value) { console.log('original setter called'); this._value = value; }, }; const { get, set } = Object.getOwnPropertyDescriptor(target, 'foo'); Object.defineProperty(target, 'foo', { get: function () { console.log('overload getter called'); return get.call(this); }, set: function (value) { console.log('overload setter called'); return set.call(this, value); }, enumerable: true, configurable: true, }); console.log('1:'); target.foo = 'baz'; console.log('2:'); console.log(target.foo);
 <div id="app"></div>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM