Javascript &引用;“切换对象”;使用闭包的组合
我网站上的很多对象都有非常相似的行为。它们都需要“切换”,如打开和关闭 我使用的是Javascript &引用;“切换对象”;使用闭包的组合,javascript,ecmascript-5,Javascript,Ecmascript 5,我网站上的很多对象都有非常相似的行为。它们都需要“切换”,如打开和关闭 我使用的是toggle()方法,它根据boolisOpen调用open()或close()方法,但似乎我只能传入一个回调(在此模式中) 如何在每次切换方法调用时传入不同的回调 我是否应该将toggle()方法移出Openable 我甚至应该有一个toggle()方法吗 我的“可打开”行为对象: // Openable Behaviour var Openable = function Openable() { var
toggle()
方法,它根据boolisOpen
调用open()
或close()
方法,但似乎我只能传入一个回调(在此模式中)
toggle()
方法移出Openable
toggle()
方法吗我的“可打开”行为对象:
// Openable Behaviour
var Openable = function Openable() {
var isOpen = false;
// Open
function open(callback) {
isOpen = true;
callback && callback();
}
// Close
function close(callback) {
isOpen = false;
callback && callback();
}
// Toggle
function toggle(callback) {
isOpen ? close(callback) : open(callback);
}
return {
get isOpen() {
return isOpen;
},
open: open,
close: close,
toggle: toggle
};
};
我的另一个具有可打开行为的对象:
var Other = function Other(element) {
var openable = Openable();
element.addEventListener('click', function(event) {
event.preventDefault();
openable.toggle(/* what goes here? */);
});
function openCallback() {
console.log("open!");
}
function closeCallback() {
console.log("closed!");
}
return {
target: element
};
};
var myToggleObject = Other(myElement);
注意:-我正在使用(我想),因为它允许我创建一个对象,而无需使用
此您可以创建一个切换回调
方法来执行以下操作:
function toggleCallback() {
openable.isOpen() ? openCallback() : closeCallback();
};
并将其传递给单击侦听器中的toggle方法
如何在每次切换方法调用时传入不同的回调
您可以向一个函数传递多个回调,因此
function toggle(callback) {
isOpen ? close(callback) : open(callback);
}
变成:
function toggle(openCallback, closeCallback) {
isOpen ? close(closeCallback) : open(openCallback);
}
我应该将toggle()方法移出Openable吗
取决于代码的组织。我认为,只要函数是“可打开”的,就可以了
我甚至应该有一个toggle()方法吗
这取决于你的代码。我可以看出它对用户界面很有用。这是一种Openable
或Other
的方法吗?在Other
中,这样您就可以保留“每个操作一次回调”。对。。。我懂了。我试图使用toggle()
来使用open()
和close()
。这很好,因为它使对象更通用。它确实使可打开
切换
方法变得多余。尽管如此。在Openable
之外使用isOpen()
之后,您不妨编写:Openable.isOpen()?openable.close(closeCallback):openable.open(openCallback)
谢谢。我有点希望单击处理程序不需要匿名函数,但它似乎是最合适的。记住,请解释下票数。。。