gpt4 book ai didi

javascript - 将对象声明为函数但带有子函数

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

不难理解如何将对象声明为可调用函数:

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);
}
}
}

fiddle

最佳答案

我可能是错的,但我认为在对象文字中干净地做到这一点会很困难。您可以定义一个返回您想要的函数的函数:

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")

关于javascript - 将对象声明为函数但带有子函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49662422/

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