如果我有一个对象
obj = {
func : function(){
return 'hello';
}
}
我通常alert(obj.func())
我当然得到"hello"
但如果我想让obj.func
只是一个变量,那么这可能吗?我不会将参数传递给函数,我只想将其返回值引用为alert(obj.func)
这样的普通变量,而不是函数调用。
感谢。
答案 0 :(得分:4)
试试这个:
obj = {
func : (function(){
return 'hello';
})()
}
答案 1 :(得分:2)
是的,那很简单!
var obj = {
func : 'hello'
};
alert(obj.func);
请参阅此工作fiddle
如果你想要它是一个计算值或某事。你仍然可以让它成为一个函数,但可以像一个简单的属性一样调用:
var obj = {
func : (function(){return 'hello';})()
};
答案 2 :(得分:2)
你所说的是一个吸气剂:它是一个作为财产的功能。 它是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,它允许定义标准属性和getter / setter,但有更多选项,尤其是“隐藏”属性的选项,这使得它不能被枚举。
了解更多信息:
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
答案 3 :(得分:-1)
var varFunc = function() { alert("hello"); }
varFunc();