我正在尝试创建s Base Model并从中扩展模型,但是当我调用DataModel时它会调用UsersModel函数...
这就是我打电话的方式:
var model = new(require('../models/DataModel'));
module.exports = PrivateController.extend({
name : 'Wall',
content : null,
run : function(type, req, res){
model.get(function(err, result){
//WHEN THIS GETS CALLED -> DISPLAYS 'users' and should me xyz from DataModel
}
});
Base.js
module.exports = function(db) {
this.db = db;
};
module.exports.prototype = {
extend: function(properties) {
var Child = module.exports;
Child.prototype = module.exports.prototype;
for(var key in properties) {
Child.prototype[key] = properties[key];
}
return Child;
}
的DataModel:
var Model = require("./Base"),
model = new Model();
var DataModel = model.extend({
collection_name: 'xyz',
get: function(callback) {
console.log(this.collection_name); // THIS SHOULD DISPLAY 'xyz'
}
});
module.exports = DataModel;
我没有显示DataModel集合名称,而是从这里得到它:
UserModel.js
var Model = require("./Base"),
model = new Model();
var UserModel = model.extend({
collection_name: 'users',
get: function(callback, email, password) {
console.log(this.collection_name); //DISPLAY users
},
module.exports = UserModel;
答案 0 :(得分:0)
我不确定您从哪个extend
函数获取代码,但它确实非常不正确。
我已将其格式化得更好,因此我们可以看到问题:
var Base = function(db) {
this.db = db;
};
Base.prototype = {
extend: function(properties) {
var Child = Base; // what?
Child.prototype = Base.prototype; // what?
for(var key in properties) {
Child.prototype[key] = properties[key];
}
return Child;
}
};
在你的扩展功能中:
您将子对象设置为对超级对象的引用,因此您可以有效地更改超级对象,因此依赖于超级原型的所有其他对象都会受到影响。
这可能是你想要做的:
var Base = function(db) {
this.db = db;
};
Base.prototype = {
extend: function(properties) {
var Child = function(){
Base.apply(this, arguments);
};
Child.prototype = Object.create(Base.prototype);
for(var key in properties) {
Child.prototype[key] = properties[key];
}
return Child;
}
};
对于node.js中的继承,我个人只会坚持使用util.inherits
。请阅读Object.create以查看更多继承示例。