Javascript 在调用时计算属性而不使用函数调用语法

Javascript 在调用时计算属性而不使用函数调用语法,javascript,Javascript,是否有任何模式可用于在调用时计算变量(如C#中的属性) 通常情况下,电话是: var bla = A.x(); 但我想对其进行评估,并得出其作为房地产的价值: var bla = A.x; console.log(bla); // prints "1" 我不需要()运算符,但在访问A.x是的,您可以使用 var bla = A.x; console.log(bla()); //or console.log(bla.call()); 还有几个选项,但这些是最简单的。从ECMAScript 5

是否有任何模式可用于在调用时计算变量(如C#中的属性)

通常情况下,电话是:

var bla = A.x();
但我想对其进行评估,并得出其作为房地产的价值:

var bla = A.x;
console.log(bla); // prints "1"
我不需要()运算符,但在访问
A.x

是的,您可以使用

var bla = A.x;
console.log(bla());
//or
console.log(bla.call());

还有几个选项,但这些是最简单的。

从ECMAScript 5开始,有一个
defineProperty
方法可用于定义属性的getter和setter

看看这个:

因此,如链接的示例所述,您可以定义如下的getter/setter:

var myTest = {
    val : "Initial Value",
    get value () {
        return this.val + " Modified";
    },
    set value(newVal) {
        this.val = newVal;
    }
};

myTest.value // "Initial Value Modified"
myTest.value = "foo"
myTest.value // "foo Modified"
祝你好运


附言:你应该记住这可能带来的兼容性问题。请阅读链接,您将在那里找到详细信息。

您一定在谈论getter和setter。
这些函数在读取(获取)或指定(设置)对象属性时被称为“幕后”函数。
它们非常标准(即>=9),但语法却有点复杂。
查看mdn:

(详细)示例,实现由变量支持的属性:

var A = (function() {
   var self = {};
   var x = 0;
   var xPropertyDescriptor = { enumerable : true ,
                               get : function() { return x },
                               set : function(val) { x=val }   };
   Object.defineProperty(self, 'x', xPropertyDescriptor);
   return self;
} () );
调用defineProperty后,您可以像访问常规属性一样访问“x”,并且会调用get或set函数。
因此,基本上,写作:

A.x = 12 // will call the getter : function(12) { x=12 }, and set the variable.
请注意,您可以在原型上定义getter/setter,以便以后更高效地创建对象(否则,您必须在每个实例的构造函数中定义它们)。
然而,在构造函数中定义属性是使用闭包(如上面的示例中)来拥有真正私有成员的唯一方法

使用中:

var res = A.x ;  // res == 0
A.x = 12 ;
var res2 = A.x   //  res2==12
var res = A.x ;  // res == 0
A.x = 12 ;
var res2 = A.x   //  res2==12