#javascript #node.js
#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. Чего именно вы пытаетесь достичь с помощью этого?
2. @Jack Я обновил свой вопрос.
3. перед вызовом метода объекта вам необходимо создать этот метод, иначе он будет
undefined
4. Это код на стороне сервера. Не браузер 🙂
5. также в MDN нестандартный Object.prototype.__noSuchMethod__
Ответ №1:
Вы ищете прокси?
var obj = Proxy.create({
get: function(target, value) {
return function() {
console.log('called ' value)
}
}
});
obj.hello(); // "called hello"
obj.world(); // "called world"
Вы должны использовать --harmony_proxies
option для включения прокси-серверов в узле.
Комментарии:
1. могу ли я включить это по умолчанию при запуске node.js ?
2. Видел это wiki.ecmascript.org /…
3. Это возможный ответ, но мне не нравится использовать экспериментальные материалы и даже вызывать их явно при запуске node. Итак, на данный момент.