让我说我有我的对象,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。隐含的功能?不,那些结果没有帮助......所以现在我在这里。
我该怎么做?
答案 0 :(得分:1)
> var foo = function fooName() {console.log("foo!")};
undefined
> foo.consoleLog = foo
{ [Function: fooName] consoleLog: [Circular] }
> foo.name
'fooName'
使用IIFE在单个表达式中进行所有初始化:
> (function(){ var foo = function fooName() {console.log("foo!")}; foo.consoleLog = foo; return foo }())
{ [Function: fooName] consoleLog: [Circular] }
答案 1 :(得分:1)
你可以这样做:
var bar = {
foo: function fooName() { console.log('foo!'); },
name: 'barName'
};
bar.foo.anyPropertyButName = 'anyValue';
这种方式foo
是一个函数(可以这样调用:bar.foo();
)并且具有值为fooName
的name属性。
如果你仍然需要bar.foo.consoleLog
成为一个函数,只需添加:
bar.foo.consoleLog = bar.foo;