gpt4 book ai didi

javascript - 带有javascript的python装饰器

转载 作者:数据小太阳 更新时间:2023-10-29 05:04:34 24 4
gpt4 key购买 nike

我想做的是:

我有一个提醒某些事情的功能:

myfunction = function(foobar) { 
alert(foobar);
};

现在我想装饰它:

decorate = function(callback) { 
return function(foobar) {
callback(foobar);
console.log(foobar);
};
};

然后我可以写:

myfunction = decorate(myfunction);

然后 myfunction 将执行正常操作 + 在控制台中登录。

如何让它与 Javascript 一起工作?

最佳答案

是的,你可以。事实上,您的实现非常完美:Live example | source

var myfunction = function(foobar) { alert(foobar); };

var decorate = function(callback) { return function(foobar) { callback(foobar); console.log(foobar); }; };

var result = decorate(myfunction);

result("Hi there");

不过,我建议使用函数声明,而不是函数表达式:

function myfunction(foobar) {
alert(foobar);
}

function decorate(callback) {
return function(foobar) {
callback(foobar);
console.log(foobar);
};
}

var result = decorate(myfunction);

result("Hi there");

如果你想创建一个更通用的版本,看看使用apply(MDN | spec)和arguments伪数组(MDN | spec):Live example | source

function decorate(original, wrapper, context) {
return function() {
try {
original.apply(this, arguments);
}
catch (e) {
}
try {
wrapper.apply(context || this, arguments);
}
catch (e) {
}
};
}

function myFunction(arg1, arg2) {
alert("arg1 = " + arg1 + ", arg2 = " + arg2);
}

var newFunction = decorate(myFunction, function(arg1, arg2) {
console.log("arg1 = " + arg1 + ", arg2 = " + arg2);
});

newFunction(1, 2);

该版本做了一些事情:

  1. 让您可以将回调作为参数提供给一个中央 decorate 函数。

  2. 让您有选择地提供一个“上下文”(this 值)以在调用回调时使用。

  3. 在调用原始回调和(如果您不提供 context)回调时保留 this 的值。

...装饰对象函数(有时称为方法)时会很方便。

关于javascript - 带有javascript的python装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10435021/

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