我正在尝试创建一个纯虚拟基类的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");
答案 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) {
}
};