gpt4 book ai didi

javascript - 在对象 Javascript 中调用 Get 和 Set 函数

转载 作者:行者123 更新时间:2023-11-29 22:03:29 25 4
gpt4 key购买 nike

我正在学习 book但我不明白以下内容。我有一个这样的对象

var serialnum = {
// This data property holds the next serial number.
// The $ in the property name hints that it is a private property.
$n: 10,
// Return the current value and increment it
get next() {
return this.$n++;
},

// Set a new value of n, but only if it is larger than current
set next(n) {
if (n >= this.$n) this.$n = n;
else throw "serial number can only be set to a larger value";
}
};
  • $在属性名称中暗示它是私有(private)属性。

如果我这样做 console.log(serialnum.$n);我看到 10。没有私有(private)的?

  • 设置值如果我这样做serialnum.next(100);我有这个错误 Property 'next' of object #<Object> is not a function如果我这样做serialnum.$n = -100;我可以设置一个值

  • 获得值(value)好的,如果我这样做 console.log(serialnum.next);我检索值

最佳答案

通常,它是这样完成的:

  • 老办法

    var serialnum = (function() {
    var $n = 10; // private
    return {
    next: function(n) {
    if (n === void(0)) return ++$n;
    if (n >= $n) return this.$n = n;
    throw "serial number can only be set to a larger value";
    }
    };
    })();
    serialnum.next(); // 11
    serialnum.next(15); // 15
  • 新方法:getter 和 setter

    var serialnum = (function() {
    var $n = 10; // private
    return {
    get next() {
    return ++$n;
    },
    set next(n) {
    if (n >= $n) return $n = n;
    throw "serial number can only be set to a larger value";
    }
    };
    })();
    serialnum.next; // 11
    serialnum.next = 15; // 15

然后,由于 $n 是在函数内部声明的,因此它是一个私有(private) 变量 - 无法从外部访问。

next 是一个特权方法(或具有特权的 getter 和 setter):因为它是在函数内部声明的,所以它可以读/写私有(private)变量;并且由于它被导出(返回)到外部,因此可以从外部调用它。

请注意,外部代码可以修改特权方法,但不能使它们读/写私有(private)变量。

另见 Private Members in JavaScript , 道格拉斯·克罗克福德 (Douglas Crockford)。

关于javascript - 在对象 Javascript 中调用 Get 和 Set 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22286049/

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