是否可以动态命名方法?
让我们说:
Class.prototype[name] = function(param) {
console.log(name, param)
}
所以,如果我这样做:
// will return `hello there`
class.hello('there')
// will return `hey there`
class.hey('there')
这可能吗?
我正在使用图书馆zerorpc。
他们的语法为
client.invoke("iter", 10, 20, 2, function(error, res, more) {
所以我想创建一个包装他们的函数的类,这样我就可以做:
client.iter(10,20,2 function(...
这是我尝试的方式:
var zerorpc = require('zerorpc')
var util = require('util')
var EventEmitter = require('events').EventEmitter
var RPC = function () {
if (!(this instanceof RPC)) return new RPC()
this.rpc = new zerorpc.Client()
}
util.inherits(RPC, EventEmitter)
module.exports = RPC()
RPC.prototype.connect = function(config) {
this.con = this.rpc.connect('tcp://' + config.host + ':' + config.port)
}
// this is the idea
RPC.prototype[name] = function(params) {
this.rpc.invoke(name, params[0], params[1], params[2], function(error, res, more) { // ...
}
在gitbub gist上看到这个。
答案 0 :(得分:1)
您在寻找proxies吗?
var obj = Proxy.create({
get: function(target, value) {
return function() {
console.log('called ' + value)
}
}
});
obj.hello(); // "called hello"
obj.world(); // "called world"
您必须使用--harmony_proxies
选项在节点中启用代理。