有人可以澄清Javascript中的构造函数和工厂函数之间的区别。
何时使用一个代替另一个?
基本区别在于,构造函数与new
关键字一起使用(这会使JavaScript自动创建一个新对象,this
在该函数内将该对象设置为该对象,然后返回该对象):
var objFromConstructor = new ConstructorFunction();
工厂函数的调用类似于“常规”函数:
var objFromFactory = factoryFunction();
但是要使其成为“工厂”,就需要返回某个对象的新html" target="_blank">实例:如果它仅返回布尔值或其他内容,则不会将其称为“工厂”函数。这不会像和一样自动发生new
,但在某些情况下确实提供了更大的灵活性。
在一个非常简单的示例中,上面引用的功能可能看起来像这样:
function ConstructorFunction() {
this.someProp1 = "1";
this.someProp2 = "2";
}
ConstructorFunction.prototype.someMethod = function() { /* whatever */ };
function factoryFunction() {
var obj = {
someProp1 : "1",
someProp2 : "2",
someMethod: function() { /* whatever */ }
};
// other code to manipulate obj in some way here
return obj;
}
当然,您可以使工厂功能比该简单示例复杂得多。
有些人喜欢对所有功能使用工厂功能,只是因为他们不喜欢记住要使用它new
(编辑:这可能是一个问题,因为没有new
该功能仍会运行,但不会按预期运行)。我没有看到这有什么好处:new
它是语言的核心部分,因此我特意避免使用它是任意的-
最好避免使用其他关键字,例如else
。
工厂功能的一个优点是,根据某些参数,要返回的对象可以是几种不同的类型。
本文向大家介绍JavaScript中工厂函数与构造函数示例详解,包括了JavaScript中工厂函数与构造函数示例详解的使用技巧和注意事项,需要的朋友参考一下 前言 当谈到JavaScript语言与其他编程语言相比时,你可能会听到一些令人困惑东西,其中之一是工厂函数和构造函数。 工厂函数 所谓工厂函数,就是指这些内建函数都是类对象,当你调用他们时,实际上是创建了一个类实例”。意思就是当我调用这个函
在Dart中,工厂构造函数需要编码器提供更多逻辑,但与常量构造函数没有太大区别,只是它们允许“非最终”实例变量。 与const Constructor相比,它们有哪些优点? 谢谢大家。 编辑 下面是关于Seth Ladd博客“Dart-试图理解“工厂”构造函数的价值”中工厂构造函数的用法。 恕我直言,使用通用构造函数,可以通过细微的差异实现相同的效果,但相当简单。 如上所示,尽管这两个实例 所以,
本文向大家介绍php构造函数与析构函数,包括了php构造函数与析构函数的使用技巧和注意事项,需要的朋友参考一下 php构造函数是对象创建完成后,第一个自动调用的方法,析构函数是当对象被释放之前最后一个自动调用的方法。本文章向大家介绍php构造函数与析构函数。 php构造函数 1.是对象创建完成后,“第一个”“自动调用”的方法 2.构造方法的定义,方法名是一个固定的, 在php4中:和类名相同的方法
下面是关于Seth Ladd博客“Dart”中工厂构造器的使用-试图理解“工厂”构造器值。 在IMHO中,使用通用构造器,可以通过细微的差异实现相同的效果,但非常简单。 如上所示,尽管这两个实例 所以,我的问题是工厂构造函数(或工厂模式)比一般/const构造函数有什么特殊的优点?因为上面的示例代码本身并没有显示工厂构造函数的优点。 谁能解释一下在Dart语言而不是Java / C#中所谓的“工厂
如果我理解正确: 例如: 以上允许我这样做: 这也阻止了我这样做: 因此,如果我对所有这些都是正确的,我会问为什么动物的额外代码? 如果您打算为只创建cat的动物使用工厂构造函数,为什么不只是拥有一个具有所需方法/属性的Cat类呢? 或者,像上面这样带有工厂构造函数的动物类的目的真的是专为Cat类设计的接口吗?
关于这里提到的工厂构造函数示例,我有一些小问题(https://www.dartlang.org/guides/language/language-tour#factory-constructors)。我知道在基本层面上只有三种类型的构造函数 - 默认,命名和参数化。 在本例中,为什么要使用<code>工厂 这是正在使用的命名构造函数吗?为什么