角度自定义模块 - “对象函数(){...} foo没有方法'bar'”

时间:2013-09-04 17:26:21

标签: javascript angularjs javascript-objects angularjs-module

我正在尝试以角度为$ http创建自定义包装器。这是代码大纲:

angular.module('jotted_resource', ['ng'])
.factory('jotted_resource', ['$http', 'communicationStatus',
    function($http, cs) {
        function jResourceFactory(url){
            function jResource(value){
                var self = this;
                this.query = function(callback){
                    var value = [];
                    return $http.get(url).then(function(response){
                        var data = response.data;
                        for(var i in data){
                            value.push(new jResource(data[i]))
                        }
                    });
                    return value;
                }
            }
            return jResource;

        }
        return jResourceFactory;
    }
]); 

但是示例代码如下:

app.factory("label", ["jotted_resource", function(jotted_resource) {
   var label = jotted_resource("api/labels");
   var all = label.query();
   ...

引发错误说:

  

TypeError:对象函数jResource(value){   ...}没有方法'查询'

我担心我对JavaScript的对象/函数/原型的所有复杂性的了解还不足以解决这个问题。请指出我该如何修复代码。

1 个答案:

答案 0 :(得分:1)

这是一个纯JavaScript问题。由于label是一个函数,您需要使用new关键字来创建一个对象,以便使原型继承工作。

var all = (new label()).query();