小编典典

构造函数与工厂函数

javascript

有人可以澄清Javascript中的构造函数和工厂函数之间的区别。

何时使用一个代替另一个?


阅读 308

收藏
2020-04-25

共1个答案

小编典典

基本区别在于,构造函数与new关键字一起使用(这会使JavaScript自动创建一个新对象,this在该函数内将该对象设置为该对象,然后返回该对象):

var objFromConstructor = new ConstructorFunction();

工厂函数的调用类似于“常规”函数:

var objFromFactory = factoryFunction();

但是要使其成为“工厂”,就需要返回某个对象的新实例:如果它仅返回布尔值或其他内容,则不会将其称为“工厂”函数。这不会像和一样自动发生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

工厂功能的一个优点是,根据某些参数,要返回的对象可以是几种不同的类型。

2020-04-25