【发布时间】:2014-08-15 00:05:51
【问题描述】:
是否有任何设计模式可以在 Javascript 中实现装饰器?
假设我有一个user 对象,具有is_authenticated 属性。
var user = {
is_authenticated: true,
name: 'Peter Parker'
}
在 Python 中,我将创建一个装饰器以返回属性 is_authenticated,并且仅在该装饰器真正返回时才运行函数命令,如下所示:
function userIsAuthenticated() {
return user.is_authenticated;
}
@userIsAuthenticated
function say(message) {
console.log(message + '\nSays ' user.name + '.');
}
在函数内部运行任何东西之前,我必须检查用户是否经过身份验证。
function say(message) {
if (user.is_authenticated) {
console.log(message + '\nSays ' user.name + '.');
}
}
我怎样才能做任何 decorator-like 是 Js?
我想到了binding在其创建中的功能
function say(message) {
this && (function(){
console.log(message + '\nSays ' user.name + '.');
}());
}.bind(user.is_authenticated);
但是这样你会丢失实例(this 现在是真/假)以及更多字符。
【问题讨论】:
标签: javascript design-patterns decorator