使用另一个函数中的函数作为 javascript 中的构造函数

Use the function inside another function as the constructor in javascript

我以这种方式构造函数,因为我需要将其作为 angularjs 工厂注入。然而,当我用它来为它创建测试时,我遇到了困难。我无法在 ItemModelGenerator 中引用 ItemModel!我不能通过将它用作构造函数来创建它的实例!我尝试了很多方法,使用 new 关键字或同时调用两者,调用其中之一,在 bot 中传递参数,或者,其中 none 有效。我很困惑...

是否可以以某种方式使用此 ItemModelGenerator 作为另一个 var 的构造函数?或者,假设使用它内部的 ItemModel 来生成,但是在一个条件下,当然,var 必须在 ItemModelGenerator 之外,因为它是一个工厂。

我试过了:

var Service = new ItemModelGenerator();
Service.ItemModel();

new ItemModelGenerator().ItemMode();

new ItemModelGenerator.ItemMode();

..etc

顺便说一句,它确实作为 angularjs 工厂注入工作,经过测试。

谢谢

'use strict';
function ItemModelGenerator() {
  function ItemModel(inputItem) {
    var defaults = {
      id:'na',
      name:'na'
    };
    var location = inputItem ? inputItem : { defaults };
    this.id = location.id;
    this.name = location.itemName ? location.itemName : location.name;
    this.itemIsReal = this.isReal(this.id);
  }

  ItemModel.prototype.isReal = function(id) {
    return id !== false ? true : false;
  };

  return ItemModel;
}

当您调用 ItemModelGenerator 时,您正在从 ItemModelGenerator 返回 ItemModel。所以你得到的 一个 ItemModel:

var ItemModel = ItemModelGenerator();
var instance = new ItemModel();
alert(instance.name);

您正在返回构造函数作为包装函数的结果。尝试:

var Service = new ItemModelGenerator()();