请问如何用Object.prototype扩展类的get/set方法?

发布于 2022-09-12 13:22:15 字数 296 浏览 18 评论 0

class Label
{

    set string(value:string)
    {
    
    }
    
    get string():string
    {
    
    }
}

我知道可以用下面的代码扩展或重写一个成员,

Label.prototype.example = function(){}

那么,请问如何用Label.prototype扩展string的get/set方法?
或者其实应该用其他的我不知道的办法来扩展?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

沐歌 2022-09-19 13:22:15

Object.defineProperty

image.png

农村范ル 2022-09-19 13:22:15

是想利用Object.defineProperty重写Label.prototype.string属性?

Object.defineProperty(Label.prototype, 'string', {
    configurable: true,
    enumerable: false,
    set(value) {
         console.log(`SubLabel.set & value=${value}`)
    },
    get() {
        return 'SubLabel.hello'
    }
})

//Test
var subLabel = new Label();
subLabel.string = 'test'; // SubLabel.set & value=test
console.log(subLabel.string); // SubLabel.hello
一萌ing 2022-09-19 13:22:15

通过 Proxy,可以灵活地“定义”属性,而不需要使用 Object.defineProperties方法。

let lableProxy = new Proxy(Label.prototype, {
  get: (obj, prop) => {
    if (prop === 'string') {
      console.log('new string get')
    }
    // 可以添加对其他属性的附加操作
  },
  set: (obj, prop, value) => {
    if (prop === 'string') {
      console.log('new string set' + value)
    }
    // 可以添加对其他属性的附加操作
  }
});
let label = new Label();
label = Object.create(lableProxy)
label.string = 'A1'; // new string setA1
console.log(label.string); // new string get
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文