动态命名方法

时间:2014-06-26 10:02:53

标签: javascript node.js

是否可以动态命名方法?

让我们说:

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上看到这个。

1 个答案:

答案 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选项在节点中启用代理。