意外的标记 '。'在为原型添加功能时

时间:2015-12-09 17:04:36

标签: javascript

我正在尝试创建一个纯虚拟基类的javascript。但我得到一个语法错误,“意外的令牌。”。语法有什么问题?

MyNamespace.MySubNamespace.Repository = {
    Repository.prototype.Get = function(id) { // <-- error occurs here

    }

    Repository.prototype.GetAll = function() {

    }

    Repository.prototype.Add = function(entity) {

    }

    Repository.prototype.AddRange = function(entities) {

    }

    Repository.prototype.Remove = function(entity) {

    }

    Repository.prototype.RemoveRange = function(entities) {

    }
}

编辑:以下是名称空间的构造方式。

var MyNamespace = MyNamespace || {};

MyNamespace.createNamespace = function (namespace) {
    var nsparts = namespace.split(".");
    var parent = MyNamespace;

    if (nsparts[0] === "MyNamespace") {
        nsparts = nsparts.slice(1);
    }

    for (var i = 0; i < nsparts.length; i++) {
        var partname = nsparts[i];

        if (typeof parent[partname] === "undefined") {
            parent[partname] = {};
        }

        parent = parent[partname];
    }

    return parent;
};

MyNamespace.createNamespace("MyNamespace.MySubNamespace");

3 个答案:

答案 0 :(得分:3)

您的代码期望一个对象,但您将该对象视为一种方法。

MyNamespace.MySubNamespace.Repository = {   <-- Object start
    Repository.prototype.Get = function(id) { // <-- You are setting a method...

你应该做的是

MyNamespace.MySubNamespace.Repository = function() { };
MyNamespace.MySubNamespace.Repository.prototype = {
    get : function(){},
    add : function(){}
};

答案 1 :(得分:0)

prototype属性用于函数,Repository是一个没有prototype属性的对象。

答案 2 :(得分:-1)

嗯,您需要定义该命名空间的每个级别,然后您需要了解您将Repository设置为不是像类一样的代码块,而是一个对象文字,因此必须使用适当的语法。

var MyNamespace = {MySubNamespace: {}};

MyNamespace.MySubNamespace.Repository = { // This is not a block. This is an object literal.
    Get: function(id) {

    },

    GetAll: function() {

    },

    Add: function(entity) {

    },

    AddRange: function(entities) {

    },

    Remove: function(entity) {

    },

    RemoveRange: function(entities) {

    }
};