javascript - 将函数转换成变量

问题描述:

我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

试试这个:

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

是的,那是很容易!

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

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

你所谈论的是一个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