gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:02:15 24 4
gpt4 key购买 nike

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

var A = (function() {
var self = {};
var a = 0;
self.x = function (){
a = a+1;
return a;
};
return self;
});

通常情况下,调用是:

var bla = A.x();

但我想对其进行评估并获取其作为属性的值(value):

var bla = A.x;
console.log(bla); // prints "1"

我不需要 () 运算符,但我仍然想在访问 A.x 时计算属性值

最佳答案

您一定是在谈论 getter 和 setter。
当您读取(获取)或分配(设置)对象属性时,这些函数会在“幕后”被调用。
它们非常标准(IE>=9),但语法有些复杂。
看看MDN:
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/defineProperty

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

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.

请注意,您可以在原型(prototype)上定义 getter/setter,以便以后更有效地创建对象(否则您必须在每个实例的构造函数中定义它们。)。
然而,在构造函数中定义属性是使用闭包(如上面的示例)拥有真正私有(private)成员的唯一方法。

使用中:

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

关于javascript - 在调用时计算属性而不使用函数调用语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25485933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com