Javascript:如何通过`=`符号将setter分配给对象?

问题描述 投票:0回答:3

有没有办法通过=标志将setter / getter分配给现有对象?

window.somesetter = set(v) {};
window.somesetter = function set(v) {};
window.somesetter = set settername(v) {};
javascript ecmascript-6 getter-setter
3个回答
0
投票

我会说不。但如果您使用代理而不是对象本身,答案是“有点是”。

但这是黑魔法,并不建议生产:)

const winProxy = new Proxy(window, {
  set(target, name, value) {
    if (typeof value === 'function' && {set: 1, get: 1}[value.name]) {
      const descriptor = Reflect.getOwnPropertyDescriptor(target, name) || {
        enumerable: false, 
        configurable: true,
      }
      
      descriptor[value.name] = value
      
      Reflect.defineProperty(target, name, descriptor)
      
    } else {
      Reflect.set(target, name, value)
    }
  }
})

winProxy.someProp = function set(v) {
  console.log('setter', v);
}

winProxy.someProp = function get() {
  console.log('getter')
}

window.someProp = 1;
window.someProp

4
投票

不,没有。

如果要将setter或getter分配给现有对象,请使用defineProperty

Object.defineProperty(window, 'setter', {
  set: function(value) { window.test = value }
});

window.setter = "Hello";
console.log(window.test);

-5
投票

试试这个表格:

window.somesetter = function (v) {};
© www.soinside.com 2019 - 2024. All rights reserved.