我的javascript代码有问题。我有这个原型,我想以一种你可以添加'中间件'或你如何调用它的方式。 (如在ExpressJS中,app.get('/user/:id/edit', loadUser, andRestrictToSelf, function(...)
)
var Server = function(...){
...
};
Server.prototype.log = function(data){
console.log(data);
};
console.log(typeof(Server.prototype.log)); //function
因此我将其更改为通过调用函数添加函数的方式,以便稍后实现_add('fnName', loadUser, function(...))
之类的内容。
var Server = function(...){
...
};
_add = function(fnName, fn){
Server.prototype.fnName = fn;
console.log(typeof(Server.prototype.fnName)); //always function
};
_add('log', function(data){
console.log(data);
});
console.log(typeof(Server.prototype.log)); //undefined
然而,这不起作用。原型没有改变。
我不想像ExpressJS那样(你添加到实例而不是原型),因为将为每个用户创建一个Server
对象(与socket.io
结合使用),因此,向对象添加函数将比添加到其函数在所有实例中都可用的原型更加开销。
答案 0 :(得分:2)
您需要使用Server.prototype[fnName]
,因为Server.prototype.fnName
在服务器原型上定义了一个名为fnName
的函数。
所以在你的例子中:
console.log(typeof(Server.prototype.log)); // undefined
console.log(typeof(Server.prototype.fnName)); // function
<强>代码:强>
var Server = function(...){
...
};
_add = function(fnName, fn){
Server.prototype[fnName] = fn;
console.log(typeof(Server.prototype[fnName])); //always function
};
_add('log', function(data){
console.log(data);
});
console.log(typeof(Server.prototype.log)); // function
请参阅this snippet。