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

Javascript:如何通过`=`符号将setter分配给对象?,javascript,ecmascript-6,getter-setter,Javascript,Ecmascript 6,Getter Setter,有没有办法通过=符号将setter/getter分配给现有对象 请尝试以下表单: window.somesetter = function (v) {}; 不,没有 如果要将setter或getter分配给现有对象,请使用defineProperty Object.definePropertywindow“setter”{ set:functionvalue{window.test=value} }; window.setter=Hello; console.logwindow.test 我

有没有办法通过=符号将setter/getter分配给现有对象

请尝试以下表单:

window.somesetter = function (v) {};
不,没有

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

Object.definePropertywindow“setter”{ set:functionvalue{window.test=value} }; window.setter=Hello;
console.logwindow.test 我会说不。但是如果你使用代理而不是对象本身,答案是肯定的

但这是黑魔法,无论如何都不推荐用于生产:

const winProxy=新建代理窗口{ 设置目标、名称、值{ 如果typeof value==='function'&&{set:1,get:1}[value.name]{ 常量描述符=Reflect.getOwnPropertyDescriptortarget,名称| |{ 可枚举:false, 对,, } 描述符[value.name]=值 Reflect.definePropertytarget、名称、描述符 }否则{ Reflect.settarget、名称、值 } } } winProxy.someProp=函数setv{ 控制台.log'setter',v; } winProxy.someProp=函数get{ 控制台。记录“getter” } window.someProp=1;
window.SomeProp这与OP问题中的第二个示例既没有区别,也没有区别。是否希望在同一属性下有多个具有相同名称/的不同setter函数?我希望一个属性有一个相同名称的setter,如果可能,并且没有Object.define。Object.defineProperty有什么问题?这个问题听起来好像会使可配置和可枚举的属性为false,这是不同的。
window.somesetter = function (v) {};