首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >角工厂“不是构造函数”

角工厂“不是构造函数”
EN

Stack Overflow用户
提问于 2017-07-31 23:00:12
回答 4查看 2.3K关注 0票数 0

我正在尝试创建一个工厂,但是在实例化它时得到了一个错误。我是不是遗漏了什么?

sessionFactory不是构造函数 新sessionController (sessionController.js:5)

控制器

代码语言:javascript
运行
复制
angular.module('app').controller('sessionController', ['sessionService', 'sessionFactory', sessionController]);

function sessionController(sessionService, sessionFactory) {
    var vm = this;
    var mySessionFactory = new sessionFactory();
}

工厂

代码语言:javascript
运行
复制
angular.module('app').factory('sessionFactory', ['$window', sessionFactory]);
function sessionFactory($window) {
    return {
        save: save,
        get: get,
        clear: clear
    }

    function save(key, value) {
        $window.sessionStorage.setItem(key, value);
    }

    function get(key) {
        return $window.sessionStorage.getItem(key);
    }

    function clear() {
        $window.sessionStorage.clear();
    }
}

代码语言:javascript
运行
复制
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
<script src="./app/app.js"></script>
<script src="./app/sessionController.js"></script>
<script src="./app/sessionService.js"></script>
<script src="./app/sessionFactory.js"></script>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-07-31 23:07:01

角调用以下工厂函数一次,以获得用于注入的单例:

代码语言:javascript
运行
复制
function sessionFactory($window) {
    return {
        save: save,
        get: get,
        clear: clear
    }

    // ...
}

因此,您正在此对象上调用new

代码语言:javascript
运行
复制
{
    save: save,
    get: get,
    clear: clear
}

您不必调用new,因为您已经有了所需的对象。

票数 2
EN

Stack Overflow用户

发布于 2017-07-31 23:09:32

这是这一行的问题所在

代码语言:javascript
运行
复制
 var mySessionFactory = new sessionFactory();

您不必实例化它,只需直接使用它,因为它已经实例化了。

票数 1
EN

Stack Overflow用户

发布于 2017-07-31 23:12:55

如果要创建工厂的实例,则应按以下方式返回一个函数-

代码语言:javascript
运行
复制
angular.module('foo', [])
.factory('Foo', ['$http', function($http) {
  return function() {
    this.x = "Some";
    this.y = "value";

    this.someFunction = function() {
      return this.x + this.y;
    };
  };
}]);

然后你可以用-

代码语言:javascript
运行
复制
var factoryObj = new Foo();

如果返回的是object而不是(构造函数) function,则不需要使用new实例化对象。您可以直接使用sessionFactory

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45426538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档