[英]Defining an 'implied' method of a 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 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] }
您可以這樣做:
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.