2013-02-14 198 views
0

我google了一下,似乎我不知道我在問什麼,或者這是不可能的。我認爲這可能是前者。javascript - 將函數轉換成變量

如果我有一個對象

obj = { 
    func : function(){ 
    return 'hello'; 
    } 
} 

,我通常做alert(obj.func())我當然得"hello"

但是,如果我想有obj.func是一個簡單的變量,是有可能以某種方式?我不會將參數傳遞給函數,我只是想將它的返回值作爲一個普通變量(如alert(obj.func))引用,而不是函數調用。

謝謝。

+0

'obj.func = obj.func();' – Bergi 2013-02-14 22:29:34

回答

4

試試這個:

obj = { 
    func : (function(){ 
    return 'hello'; 
    })() 
} 
+0

真棒!這正是我所錯過的。如果我理解正確,第一個(...)是函數的結果,即返回值,最後的第二個()實際上是調用該函數? – tim 2013-02-14 22:40:22

+2

簡而言之是的,JavaScript是充滿了這些瘋狂的東西,我建議你閱讀http://eloquentjavascript.net/contents.html這將使你成爲一個殺手JavaScript程序員(以及至少一個更好的...)。 – mpm 2013-02-14 22:42:39

+0

感謝您的鏈接 - 清爽看到簡單的網站...就像一本真正的書! – tim 2013-02-14 22:46:46

2

是的,那是很容易!

var obj = { 
    func : 'hello' 
}; 

alert(obj.func); 

看到這方面的工作fiddle

,如果你希望它是一個計算值或某事。你仍然可以讓它成爲一個函數調用,但像一個簡單的屬性:

var obj = { 
    func : (function(){return 'hello';})() 
}; 
+1

正好。謝謝。我不能接受多個答案,所以+1必須足夠:) – tim 2013-02-14 22:41:52

+0

awww ... sweet:P – nozzleman 2013-02-14 22:43:15

-1
var varFunc = function() { alert("hello"); } 
    varFunc(); 
2

你所談論的是一個getter:它是可以作爲一個屬性的函數。 這是標準的自JavaScript 1.8.5,這意味着舊的瀏覽器將無法處理它。
的語法如下,使用例如:

obj = { 
    get func() { return "hello" ; } 
}; 
// use like this : 
console.log(obj.func); 

最有可能你會想也定義setter:這也是表現 像一個屬性的函數。語法是:

obj = { 
    get func() { return this._innerText ; }, 
    set func(txt) { this._innerText = txt ; }, 
    _innerText : "hello" 
}; 

console.log(obj.func) ; // output is hello 
obj.func = "godd bye" ; 
console.log(obj.func) ; // output is good bye 

顯然,作爲經常與簡單的例子,這個人是沒有大用處:

讓我們使用的getter/setter看到一個度弧度轉換器:

var Angle = { 
     get degree()  { return this._degree ; }, 
     set degree (dg)  { this._degree = dg ; }, 
     get radian()  { return 2*Math.PI*this.degree/360 ; }, 
     set radian (rd)  { this._degree = rd * 360/(2*Math.PI) ; }, 
     _degree : 0 
} ; 
// you can use : 
Angle.radian = Math.PI/2; 
console.log (Angle.degree); // -->> output is 90 
Angle.degree=45 ; 
console.log(Angle.radian) ;  // --> output is 0.7853... which is PI/4 

你也可以看一下Object.defineProperty,它允許定義標準屬性和getters/setters,但是有更多的選項,特別是'隱藏'屬性的選項,允許它不被枚舉。

更多信息:
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/get https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/set https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty