我有一個看起來像這樣的文件:ExpressJS需要Javascript原型對象在另一個文件
function UserController(){};
UserController.prototype = {
theData: [],
findAll: function(callback) {
callback(null, this.theData);
},
findByID: function(id, callback) {
var result = null;
var count = theData.length;
for (var i = 0; i < count; i++) {
if (this.theData[i]._id == id) {
result = this.theData[i];
break;
}
}
callback(null, result);
},
findByName: function(name, callback) {
var result = null;
var count = theData.length;
for (var i = 0; i < count; i++) {
if (this.theData[i].name == name) {
result = this.theData[i];
break;
}
};
callback(null, result);
},
save: function(users, callback) {
var user = null;
if(typeof(users.length) === 'undefined') {
users = [users];
}
var count = users.length;
for (var i = 0; i < count; i++) {
user = users[i];
user._id = userCounter++;
user.created_at = new Date();
};
callback(null, users);
}
};
當我檢查對象(基於關this),它告訴我,它is function UserController(){}
,沒有任何方法或屬性。
我從來沒有在Javascript中使用原型,我看不出我在這裏做的事情有什麼問題。應該指出的是,我將這與Node.js和Expressjs一起使用,但我不相信會導致此問題。
編輯
爲了簡潔起見,我只貼了我目前正在使用的,但我也有過使用文件中像這樣完全一樣的問題:
var userCounter = 1;
function UserController(){};
UserController.prototype.theData = [];
UserController.prototype.findAll = function(callback) {
callback(null, this.theData);
};
UserController.prototype.findByID = function(id, callback) {
var result = null;
var count = theData.length;
for (var i = 0; i < count; i++) {
if (this.theData[i]._id == id)
{
result = this.theData[i];
break;
}
};
callback(null, result);
};
UserController.prototype.findByName = function(name, callback) {
var result = null;
var count = theData.length;
for (var i = 0; i < count; i++) {
if (this.theData[i].name == name) {
result = this.theData[i];
break;
}
};
callback(null, result);
};
UserController.prototype.save = function(users, callback) {
var user = null;
if(typeof(users.length) === 'undefined') {
users = [users];
}
var count = users.length;
for (var i = 0; i < count; i++) {
user = users[i];
user._id = userCounter++;
user.created_at = new Date();
};
callback(null, users);
};
還有一個編輯
如果我把它放在同一個文件中並檢查它,我會得到我期望的結果:
function Test(){};
Test.prototype = {
theData: [],
hello: function(){
return "Hello World!";
}
};
我沒有看到區別,在UserController代碼中看不到錯誤。
我想知道如果你的問題是你的第一部分是一個函數,那麼你正在以一種我通常爲向對象添加函數的方式添加函數。你可能想要關注這個,看看它是否有幫助:http://mckoss.com/jscript/object.htm –
你真的運行過代碼並試圖調用方法嗎?不要相信每一個輸出。 –
@詹姆斯布萊克:這是正常的原型繼承。代碼實際上沒有錯。函數的原型實際上是一個對象。 –