簡體   English   中英

javascript-將函數轉換為變量

[英]javascript - convert function into variable

我在Google上搜索了一下,似乎我不知道我在問什么,或者這是不可能的。 我認為可能是前者。

如果我有一個對象

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';})()
};

您所說的是一個吸氣劑:它是一個可作為屬性工作的函數。 自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 / setter,但還有更多選擇,尤其是“隱藏”屬性的選項,該屬性不允許枚舉。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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