javascript - 如何创建一个具有同名属性和函数的类

标签 javascript class

我希望能够在 javascript 中同时调用类似的内容:

classInstance.room.get('criteria');
classInstance.room('criteria').remove('criteria');
classInstance.room().update('criteria');

我在 shouldjs 看到了类似的实现

should(10).be.a.Number();
(10).should.be.a.Number();

已更新

我有以下代码:

function connectToDatabase() {
    var server = orientDB(dbConfig.server);
    var db = server.use(dbConfig.database);
    db.on("endQuery", function onDbEndQuery() {
        db.server.close();
    });
    return db;
}
var DbSet = function DbSet(name) {
return {
    list: function list(where, select, order) {
        where = where || true;
        select = _.isString(select) || _.isArray(select) ? select : '*';
        order = _.isString(order) || _.isArray(order) ? order : 'rid';
        return connectToDatabase()
            .select(select)
            .from(name)
            .where(where)
            .order(order)
            .all();
    },

    get: function get(where, select) {
        where = where || true;
        select = _.isString(select) || _.isArray(select) ? select : '*';
        return connectToDatabase()
            .select(select)
            .from(name)
            .where(where)
            .all()
            .then(function onResults(results) {
                if (results.length > 1) {
                    throw new Error('multiple results');
                }
                return results[0];
            });
    },
    create: function create(record) {
        return connectToDatabase()
            .insert()
            .into(name)
            .set(record)
            .one();
    },

    update: function update(where, changes) {
        where = where || true;
        return connectToDatabase()
            .update(name)
            .set(changes)
            .where(where)
            .scalar();
    },

    remove: function remove(where) {
        where = where || true;
        return connectToDatabase()
            .delete('VERTEX', name)
            .where(where)
            .scalar();
    }
};
};
var db = function getDb() {
    return {
        room: new DbSet('Room'),
        invitation: new DbSet('Invitation'),
        participant: new DbSet('Participant'),
    };
};
module.exports = db();

我想更改代码以便能够执行以下代码:

var db=require('path/to/database');
var room = db.room.get({name:'room 1'});
var sameRoom = db.room({name:'room 1'}).get();
db.room.create({name:'second room'});
db.room({name:'second room'}).create();

//same for methods list and delete
var room = db.room.list({status:'active'});
var sameRooms = db.room({status:'active'}).list();
db.room.update({name:'second room'},{status:'inactive'});
db.room({name:'second room'}).update({status:'inactive'});

我也希望能够对邀请和参与者执行相同的代码。

最佳答案

我们需要更多关于这些函数的功能的信息,但此代码展示了这些功能。

Klass = function () {};
Klass.prototype.room = function () {
    ....
    return {
        get: function () {...},
        remove: function () {...},
        update: function () {...}
    }
};
Klass.prototype.room.get = function () {...};

classInstance = new Klass();

关于javascript - 如何创建一个具有同名属性和函数的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32358692/

相关文章:

c++ - 指向节点的指针不更新节点属性

c++ - 如何在 C++ 中从另一个类的方法访问一个类的方法

c++ - 类定义和调用有困难

c++ - 将类对象放在 vector 中?

JavaScript 乘法表数组

javascript - 如何在 javascript 中将带有 JSON 对象的二维数组转换为单个数组?

class - phpunit:如何在测试之间传递值?

javascript - 如何知道knockout validation中哪个字段无效?

javascript - javascript类中的神秘错误

javascript - 当某个节点被选中/取消选中时,自动选中/取消选中 extjs 树中的所有子树节点