将函数转换为变量

convert function into variable

本文关键字:变量 转换 函数      更新时间:2023-09-26

我在谷歌上搜索了一下,似乎要么不知道我在问什么,要么这是不可能的。我想可能是前者。

如果我有一个对象

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

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

但是,如果我想让obj.func只是一个变量,这可能吗?我永远不会将参数传递给函数,我只想将其返回值引用为像alert(obj.func)这样的普通变量,而不是函数调用。

谢谢。

试试这个:

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

是的,很容易!

var obj = {
  func :  'hello'
};
alert(obj.func);

看看这个工作小提琴

如果你想让它是一个计算的值或某事,你仍然可以让它成为一个函数,但可以像一个简单的属性一样调用:

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

您所说的是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,它允许定义标准属性和getter/setter,但有更多选项,尤其是"隐藏"属性的选项,它允许不枚举属性。

有关详细信息:
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/gethttps://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/sethttps://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty

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