gpt4 book ai didi

javascript - 封闭类与经典类

转载 作者:行者123 更新时间:2023-11-28 12:46:01 25 4
gpt4 key购买 nike

我正在使用 Node.js。

你能说出使用这个(闭包)的优点在哪里吗:

function sayHello() {
var num = 0;

var sayAlert = function (val) {
num++;
console.log(num);
}

return sayAlert;
}

关于这个古老的经典:

function sayHello2() {
var num = 0;

this.sayAlert = function (val) {
num++;
console.log(num);
}

}
<小时/>
var ee1 = sayHello();
ee1(5);
ee1(6);

var ee2 = new sayHello2();

ee2.sayAlert(5);
ee2.sayAlert(6);

(更短的代码可能用于闭包和更多“JavaScipt 方式”?)

最佳答案

看起来你真正想要的是一个带有静态计数器的函数。为此,您可以使用立即执行的函数。

var say = (function() {
var num = 0;
return function (val) {
// Not sure why you're passing val here, it's not used
num++;
console.log(num);
}
})();

除非您想要的是多个计数器,否则您应该使用更好的名称,以便所有阅读它的人都清楚。

function createCounter() {
var num = 0;
return function () {
console.log(++num);
}
}

在第二个示例中,您通过在构造函数的闭包上使用计数器来实现相同的功能,我们将其称为“Speaker”。

function Speaker() {
var num = 0;
this.sayAlert = function() {
console.log(++num);
}
}

他们都做同样的事情

say(); say();  //outputs 1,2
var speaker = new Speaker();
speaker.sayAlert(); speaker.sayAlert(); //outputs 1,2
var speaker2 = new Speaker();
speaker2.sayAlert(); speaker2.sayAlert(); //outputs 1,2

var ctr1 = createCounter(); ctr1(); ctr1(); //outputs 1,2
var ctr2 = createCounter(); ctr2(); ctr2(); //outputs 1,2

使用哪一个取决于您想要函数还是对象。主要是您更喜欢编写函数式代码还是面向对象代码。

关于javascript - 封闭类与经典类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7504430/

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