javascript - 定义 Javascript 对象的 'implied' 方法

标签 javascript object

假设我有我的对象,foo:

var foo = {
    name: "fooName",
    consoleLog: function() {console.log("foo!")}
}

...但我不想必须指定 foo.consoleLog() 才能调用该函数,我只想调用 foo()为了获得相同的效果,保留该对象的所有其他规范,例如上面显示的 name,因此 foo.name 仍应返回fooName.

换句话说,我如何操作它以便 foo()foo! 记录到控制台, foo.name 将返回 fooName?

还值得注意的是,foo 将是另一个对象的子对象。

所以,它可能看起来更像是这样:

var bar = {
    foo: {
        name: "fooName",
        consoleLog: function() {console.log("foo!")}
    },
    name: "barName"
}

我试图寻找这个,但我不知道该怎么调用它——主函数?不,那返回了太多 Java。隐含函数?不,这些结果没有帮助...所以现在我在这里。

我该怎么做?

最佳答案

你可以这样做:

var bar = {
  foo: function fooName() { console.log('foo!'); },
  name: 'barName'
};
bar.foo.anyPropertyButName = 'anyValue';

这样 foo 是一个函数(可以这样调用:bar.foo();)并且有一个值为 的 name 属性fooName.

如果您仍然需要 bar.foo.consoleLog 作为函数,只需添加:

bar.foo.consoleLog = bar.foo;

关于javascript - 定义 Javascript 对象的 'implied' 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32793616/

相关文章:

javascript - 在没有轮询的情况下检测何时按下后退/前进按钮? (哈希变化)

javascript - 对对象中的方法和属性使用相同的变量

javascript - JS 对象,需要解释发生了什么以及为什么

c# - 为什么 Equals 和 ReferenceEquals 方法的结果不同,即使变量是引用类型?

javascript - Ionic 与谷歌分析

javascript - 使用 JS 从 html 和 DOM 中删除脚本标签

javascript - 使用 lodash 将数组转换为对象

c# - 为什么 GC.GetTotalMemory() 和 CLR Profiler 数字之间存在巨大差异?

javascript - 在 Firebase 控制台中记录 JSON 对象

javascript - Bootstrap 网格在 IE8 中不工作