gpt4 book ai didi

javascript - 就良好实践而言,带有闭包的 javascript 原型(prototype)是一件好事吗

转载 作者:行者123 更新时间:2023-11-28 06:03:18 24 4
gpt4 key购买 nike

我正在尝试学习 JavaScript 几周(node.js)。我以前对 .NET 有一些了解,但事实证明这是一件坏事。我对 javascript 的总体理解是:

  • 一切都应该放在函数中,我们可以将它们视为类,但不要这样调用它们
  • 函数(方法)应该始终放在原型(prototype)中,原型(prototype)就像是我们“类”的每个实例的共享函数,也就是说 - 为所有实例实例化一次
  • 闭包是一些好东西,它们隐藏私有(private)方法,它们似乎也会保留在内存中直到未知的时刻,保存变量

写这篇文章只是为了让你了解我目前对 JS 的理解,但实际的问题如下:我有一些代码,希望在原型(prototype)中有一个闭包,因此 - 以我对 javascript 的意图的弱理解编写使用。所以,

  1. 带有闭包的 JavaScript 原型(prototype)在以下方面是一件好事吗
    好的做法,如果是的话,这段代码是很好的例子吗?
  2. 为什么我想在我的类构造函数中“返回这个”?
  3. 和finaly - 代码no1 和no2 的部分是一样的吗?

function createFunctionWithClosure() { // number, and a gensym method that produces unique strings
var prefix = '';
var seq = 0;
return {
set_prefix(p) {
prefix = String(p);
},
set_seq: function(s) {
seq = s;
},
get_unique: function() {
var result = prefix + seq;
seq += 1;
return result;
}
};
}

//example no1
function myclass_t() {
//why some examples have
return this
}
myclass_t.prototype = createFunctionWithClosure();
var myclass = new myclass_t()
myclass.set_prefix('no1--->')
myclass.set_seq(100)
console.log(myclass.get_unique()) //100
console.log(myclass.get_unique()) //101...

//example no2
var myvar = createFunctionWithClosure();
myvar.set_prefix('no2-->')
myvar.set_seq(1000);
myvar.get_unique()
myvar.get_unique()
console.log(myvar.get_unique()) //1002
console.log(myvar.get_unique()) //1003

我确实尝试在谷歌上搜索很多内容,但有些信息(根据最近的一些评论判断)有点过时,并且可能不再有效,例如 this question about perfomance of closures

最佳答案

这不是对您问题的直接回答,但我认为您真正需要的是了解原型(prototype)继承在 javascript 中如何工作的基础知识。

这是一个good video and a live playgroundMozilla docs也是一个很好的信息来源。

一旦您理解了这些事情,您可能会觉得这是一种“hackish”的做事方式,您是否需要接受这一点或转向 ES6 或某些编译为 javascript 的语言(如 TypeScript),请参阅 this question了解更多相关信息。

关于javascript - 就良好实践而言,带有闭包的 javascript 原型(prototype)是一件好事吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37100285/

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