簡體   English   中英

如何創建具有相同名稱的屬性和函數的類

[英]How to create a class which has a property and a function with same name

我希望能夠同時調用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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM