要弄清楚如何将对象声明为可调用函数并不难:
const Sys = {
log: function() {
//do whatever
}
}
然后使用Sys.log();
但是,在添加新的子功能时,我将如何维护此功能?
基本上,我希望能够拨打Sys.log.clear()
之类的内容,同时仍然可以拨打Sys.log()
。
我得到的最接近的是这个,但它显然不起作用或我不会在这里问¯_(ツ)_ /¯任何帮助都表示赞赏。提前致谢
const Sys = {
log: {
function(arg) {
alert(arg);
},
clear: function(arg) {
alert(arg);
}
}
}
答案 0 :(得分:2)
我可能错了,但我认为在对象文字中干净利落地做这件事很难。您可以定义一个返回所需函数的函数:
function makelog() {
let fn = function(arg){
console.log(arg)
}
fn.clear = function(arg){
console.log(arg)
}
return fn
}
const sys = {
log: makelog()
}
sys.log("hello")
sys.log.clear("world")
这与:
大致相同
const sys = {
log: function(arg) {
console.log(arg)
}
}
sys.log.clear = function(arg) {
console.log(arg)
}
sys.log("hello")
sys.log.clear("world")
如果你可以使用getter,你也可以这样做:
const sys = {
get log() {
let fn = function(arg){
console.log("from log: ", arg)
}
fn.clear = function(arg){
console.log("from clear: ", arg)
}
return fn
}
}
sys.log("foo")
sys.log.clear("bar")
您还可以从允许更传统链接的函数返回您的对象,但是您需要调用这两个函数:
const sys = {
log: function(arg) {
if (arg !== undefined) console.log(arg);
return this
},
clear: function(arg) {
console.log(arg);
}
}
sys.log("hello").clear("world")
sys.log("just log")
sys.log().clear("just clear")