Javascript 返回无值属性

Javascript 返回无值属性,javascript,getter-setter,Javascript,Getter Setter,在javascript中,可以将对象的属性定义为getter/setter,而不仅仅是普通值: Object.defineProperty( obj, 'complex_property', { get: function getter() { return this.protected; }, set: function setter( value ) { this.protected = value; } } ); 有没有任何方法可以在不首先计算对象的getter函数的情况

在javascript中,可以将对象的属性定义为getter/setter,而不仅仅是普通值:

Object.defineProperty( obj, 'complex_property', {
    get: function getter() { return this.protected; },
    set: function setter( value ) { this.protected = value; }
} );
有没有任何方法可以在不首先计算对象的getter函数的情况下返回对象的非值属性,从而实现这类操作

obj.property = function( name ) { return this.[ name ]; };

// Doesn't work:
// ReferenceError: invalid assignment left-hand side
obj.property( 'complex_property' ) = 5;

最后一行有效地读取了6=5-显然是一个错误-因为这个.complex_属性首先被计算,然后返回。将闭包与getter setter属性相结合是模拟私有属性和验证赋值的有效方法,而不必使用实际的get/set函数:这是现代javascript的一个更好的特性。如果有一种方法可以返回未赋值的getter/setter属性,那就更好了:有没有一种方法我错过了,或者根本不可能?我们是否一直在使用set-prop、value函数?

不幸的是,这在JavaScript函数中是不可能的。由用户代码创建的所有JavaScript函数只能返回值,而不能返回引用,从ES6开始,浏览器中的代码也无法实现这一点

返回声明的评估如下所示,我强调:

如果表达式不存在,则返回未定义的空表达式。 让exprRef作为计算表达式的结果。 Return,GetValueexprRef,空。
唯一的方法是使用setproperty、value函数或创建实际的setter。

您可以获得一个属性。至少是一个属性描述符。而且也不漂亮

var prop = Object.getOwnPropertyDescriptor(obj /* from question */, 'complex_property');
prop.set.call(obj, 5);
编辑:

obj.property = function (name) { return Object.getOwnPropertyDescriptor(this, name); }
obj.property('complex_property').set.call(obj, 5);