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

Use the function inside another function as the constructor in javascript

本文关键字:函数 内部 构造函数 另一个 javascript      更新时间:2023-09-26

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

是否有可能以某种方式使用这个ItemModelGenerator作为另一个变量的构造函数?或者,让我们说使用它内部的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()();