gpt4 book ai didi

javascript - 这是 JavaScript 构造函数模式吗?

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

我一直在我的 JS 代码中使用这种模式:

function Thing() {
var otherData = {
// Private variables?
name : "something"
}

var myThing = {
data: "somedata",
someFunction: function () {
console.log(otherData.name);
}
}

return myThing;
}

然后在使用它的时候做:

var thing = Thing();
thing.someFunction();

我在 JS 中看到过构造函数和单例的例子,但我以前没有遇到过这种模式。这个图案有名字吗?这种模式有什么潜在的问题吗?以前我只是使用对象字面量模式,但想通过将其放在闭包中来获取私有(private)变量。

最佳答案

Is there a name for this pattern?

它有各种各样的名字。我听说过的常见的是:

  • 工厂函数
  • maker function(这是推广它们的 Douglas Crockford 所使用的术语)
  • 生成器函数

为避免混淆,我们不称它们为“构造函数”或“构造函数”,因为该术语专门用于与 new 一起使用的函数,而您的不是。

(注意:此上下文中的“构建器函数”与构建器模式 [例如,GoF 模式]无关。那是完全不同的事情。类似地,这里的“工厂函数”与工厂模式并没有真正相关,但在这种情况下存在重叠,因为工厂模式使用工厂函数。“Maker”的优点是没有潜在的混淆;我敢肯定某处有一些“制造商模式”,但至少在最初的 GoF 书中没有。)

Are there any potential problems with this pattern?

嗯,所有模式都存在潜在问题。 :-) 这个没有什么特别的问题,但是,没有。

只是指出它没有的一个问题:有人可能会提到您没有利用具有该模式的原型(prototype),但也许您只是不需要具有该特定构建器的原型(prototype),如果你这样做了,你可以很容易地使用一个:

var thingProto = {
method: function() {
// I'm a shared method
}
};
function buildThing() {
var otherData = {
// Private variables?
name : "something"
}

var myThing = Object.create(thingProto);
myThing.data = "somedata";
myThing.someFunction = function () {
console.log(otherData.name);
};

return myThing;
}

不改变模式。


作为样式说明,通常您不会将其大写,因为 JavaScript 中的压倒性约定是大写函数是构造函数。所以 Thing 可能被称为 createThingbuildThing 或者只是 thing

关于javascript - 这是 JavaScript 构造函数模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33677222/

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