gpt4 book ai didi

javascript - 使用闭包进行模块封装

转载 作者:行者123 更新时间:2023-12-03 11:43:58 24 4
gpt4 key购买 nike

Douglas Crockford 的《JavaScript:The Good Parts》中有一个使用函数和闭包来封装模块的示例。根据下面的描述unique应该包含“Q1000”。我希望这个模块模式能够工作,但是 prefixseq 似乎没有改变,因为 unique 在运行这个示例时产生“0”。可能是什么原因?

var serial_maker = function () {
// Produce an object that produces unique strings. A
// unique string is made up of two parts: a prefix
// and a sequence number. The object comes with
// methods for setting the prefix and sequence
// number, and a gensym method that produces unique
// strings.
var prefix = '';
var seq = 0;
return {
set_prefix: function (p) {
prefix = String(p);
},
set_seq: function (s) {
seq = s;
},
gensym: function () {
var result = prefix + seq;
seq += 1;
return result;
}
};
};
var seqer = serial_maker();
seqer.set_prefix = ('Q');
seqer.set_seq = (1000);
var unique = seqer.gensym(); // unique is "Q1000"

最佳答案

您正在覆盖 set_* 函数,而不是调用它们。这里有两种不同的修复方法

<小时/>

更改调用

var seqer = serial_maker();
seqer.set_prefix('Q');
seqer.set_seq(1000);
var unique = seqer.gensym(); // unique is "Q1000"
<小时/>

使用set运算符

return {
set prefix(p) {
prefix = p.toString();
},
set seq(s) {
seq = s | 0;
},
gensym: function () {
var result = prefix + seq;
seq += 1;
return result;
}
};

// ...

var seqer = serial_maker();
seqer.prefix = 'Q';
seqer.seq = 1000;
var unique = seqer.gensym(); // unique is "Q1000"

关于javascript - 使用闭包进行模块封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26140489/

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