无法使用工厂创建对象

时间:2013-08-11 20:50:32

标签: javascript angularjs

我的代码:

webApp.controller ('entityCtrl', function ($scope, Entity) {  
    $scope.x = new Entity('1','3343','32434');
});


webApp.factory('Entity',function(){

  var _id,
      _created,
      _updated;


  //constructor

  function Entity(id,created,updated){


      this._id = id;
      this._created = created;
      this._updated = updated;

      return this;
  }

  var save = function (){
      console.log('save');
  };

  var update = function () {
      console.log('update');
  };

  var _delete = function () {
      console.log('delete');
};

  return {

      save: save,
      update: update,
      delete: _delete
  }

});

我得到的错误:

TypeError: object is not a function
at new <anonymous> (http://localhost/webApp/trunk/htdocs/js/rw/controllers.js:12:16)
at invoke (http://localhost/webApp/trunk/htdocs/js/vendors/angular.js:2902:28)
at Object.instantiate (http://localhost/webApp/trunk/htdocs/js/vendors/angular.js:2914:23)
at $get (http://localhost/webApp/trunk/htdocs/js/vendors/angular.js:4805:24)
at $get.i (http://localhost/webApp/trunk/htdocs/js/vendors/angular.js:4384:17)
at forEach (http://localhost/webApp/trunk/htdocs/js/vendors/angular.js:137:20)
at nodeLinkFn (http://localhost/webApp/trunk/htdocs/js/vendors/angular.js:4369:11)
at compositeLinkFn (http://localhost/webApp/trunk/htdocs/js/vendors/angular.js:4015:15)
at compositeLinkFn (http://localhost/webApp/trunk/htdocs/js/vendors/angular.js:4018:13)
at publicLinkFn (http://localhost/webApp/trunk/htdocs/js/vendors/angular.js:3920:30)    angular.js:5754

我做错了什么?

1 个答案:

答案 0 :(得分:2)

这与Angular实际上没什么关系。您正在从方法返回一个Object(如错误所示)。您可能想要退回Entity功能。

考虑这个例子:

webApp.controller ('entityCtrl', function ($scope, Entity) {  
    $scope.x = new Entity('1','3343','32434');
});

webApp.factory('Entity',function(){
  var Entity = function(id,created,updated){
      this._id = id;
      this._created = created;
      this._updated = updated;
  };
  Entity.prototype.save = function (){
      console.log('save');
  };
  Entity.prototype.update = function () {
      console.log('update');
  };
  Entity.prototype._delete = function () {
      console.log('delete');
  };

  return Entity;
});

顺便说一下。您可能希望观看此视频,了解面向对象JS的工作原理:http://youtu.be/PMfcsYzj-9M