Node.js JavaScript创建基础模型并扩展它

时间:2014-04-03 10:55:16

标签: javascript node.js oop model-view-controller

我正在尝试创建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;

1 个答案:

答案 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以查看更多继承示例。