错误我不明白

时间:2012-11-29 13:24:10

标签: javascript oop

任何人都可以纠正我在这里做的事情

Uncaught TypeError: Object function DataService($scope) {
        this.$scope = $scope;

        // Members Area
        var addVessel = function (userId) {
            alert("user"+userId);
        };

    } has no method 'addVessel'

非常感谢 - 我是新手

在审核了回复之后,似乎问题是嵌套在更高的位置

这是命名空间/类

// Member Service Namespace
var MemberService;
(function (MemberService) {

// Member service type
var DataService = (function ($scope) {

    // Construct the data service
    function DataService($scope) {
        this.$scope = $scope;

        // Members Area
        this.addVessel = function (userId) {
            alert("user"+userId);
        };

    }

    return DataService;
})();
MemberService.DataService = DataService;

})(MemberService || (MemberService = {}));

这就是电话

MemberService.DataService.addVessel('XXX');

2 个答案:

答案 0 :(得分:5)

您永远不会将方法addVessel()添加到对象中,而是将其用作对象范围内的“私有”方法。

请改用:

function DataService($scope) {
    this.$scope = $scope;

    // Members Area
    this.addVessel = function (userId) {
        alert("user"+userId);
    };

}

修改

您的错误似乎是,您使用DataService创建了一个构造函数,但实际上从未调用此构造函数。

所以一个解决方案就是改变这一行

MemberService.DataService = DataService;

MemberService.DataService = new DataService( param );

这将创建`DataService的新实例,并将其附加到MemberService.DataService

但是,如果您想要创建多个实例,那么到目前为止您的代码是正确的,但是为了调用,您首先必须创建此构造函数的对象:

var myService = new MemberService.DataService( param );

答案 1 :(得分:0)

更改

var addVessel = ...

this.addVessel = ...

那应该解决它。

在前一种情况下,addVesselDataService函数中的局部变量。而在后一种情况下,它是使用点表示法可访问的函数对象DataService的成员。