簡體   English   中英

定義Javascript對象的“隱式”方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM