gpt4 book ai didi

Javascript函数装饰器设计模式

转载 作者:行者123 更新时间:2023-12-03 12:03:02 29 4
gpt4 key购买 nike

是否有任何设计模式可以在 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 + '.');
}

在函数内运行任何内容之前,我必须检查用户是否通过了 Javascript 身份验证。

function say(message) {
if (user.is_authenticated) {
console.log(message + '\nSays ' user.name + '.');
}
}

我怎样才能做任何类似装饰器的Js?我考虑过在创建函数时绑定(bind)该函数

function say(message) {
this && (function(){
console.log(message + '\nSays ' user.name + '.');
}());
}.bind(user.is_authenticated);

但是这样你就会丢失实例(this 现在是 true/false)以及更多字符。

最佳答案

只需包装它,然后让 is_authentificated 返回一个新函数:

function userIsAuthenticated(fn) {
return function() {
if (user.is_authenticated)
return fn.apply(this, arguments);
};
}

你可以用它装饰任意函数:

var say = userIsAuthenticated(function say(message) {
console.log(message + '\nSays ' + user.name + '.');
});

关于Javascript函数装饰器设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25319453/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com