gpt4 book ai didi

Javascript 返回封闭函数

转载 作者:行者123 更新时间:2023-11-29 10:46:35 25 4
gpt4 key购买 nike

我有一个简单的场景,我在添加它之前检查它是否存在,如果存在,我返回函数(因此退出)。我多次使用这个模式,我想在另一个简单的函数中将它解耦。

function onEvent(e){
if( this.has(e) )
return
this.add(e);
// More logic different on an event-basis
}

我想像这样解耦它:

function safeAdd(e){
if( this.has(e) )
return
this.add(e);
}

function onEvent(e){
safeAdd(e);
// More logic
}

但显然这样做只是返回safeAdd并且不会从onEvent退出,其余的逻辑无论如何都会被执行。

我知道我可以这样做:

function safeAdd(e){
if( this.has(e) )
return false
this.add(e);
return true
}

function onEvent(e){
if( !safeAdd(e) )
return
// More logic
}

但是,由于我重复了很多次,所以我希望尽可能简洁。

最佳答案

你可以用这样的东西把它翻过来:

function safeAdd(callback) {
return function(e) {
if(this.has(e))
return false;
this.add(e);
return callback.call(this, e);
};
}

然后你可以这样做:

var obj = {
onEvent: safeAdd(function(e) {
console.log('more logic', e);
}),
onPancakes: safeAdd(function(e) {
console.log('pancakes', e);
}),
has: function(e) { /* ... */ },
add: function(e) { /* ... */ }
};

演示:http://jsfiddle.net/ambiguous/T6pBQ/

如果您需要在函数中支持更多参数,请切换 callapply并使用 arguments而不是 e:

function safeAdd(callback) {
return function() {
if(this.has(arguments[0]))
return false;
this.add(arguments[0]);
return callback.apply(this, arguments);
};
}

演示:http://jsfiddle.net/ambiguous/3muzg/

关于Javascript 返回封闭函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18555419/

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