簡體   English   中英

如何使用Google Closure編譯器聲明動態屬性?

[英]How to declare dynamic properties with Google Closure Compiler?

/**
 * @param {Object} object
 * @param {(string|number)} name
 * @param {*} value
 */
var fabric = function(object, name, value) {
    object[name] = value;
};


fabric(Number, 'MAX_INTEGER', 9007199254740991);
// ...

console.log(Number.MAX_INTEGER); // 9007199254740991

警告:JSC_INEXISTENT_PROPERTY:屬性MAX_INTEGER從未在第14行字符12的Number上定義

如何在沒有預定義的情況下聲明動態屬性?

UPD:

數[ 'MAX_INTEGER'];

這屬於文檔的ADVANCED_OPTIMIZATIONS限制 您必須使用點分符號或引用語法一致地引用屬性。 當您混合訪問時,編譯器可能會重命名點分訪問,但不會觸及引用的語法,因此會生成錯誤的代碼。

如果確實要以這種方式添加屬性,則有兩種選擇:

在您的外部代碼中添加一個存根聲明(這將防止重命名):

/** @const {number} */
Number.MAX_INTEGER;

或將@lends與對象文字一起使用:

/**
 * @param {Object} object
 * @param {Object} props
 */
var fabric2 = function(object, props) {
  for (var prop in props) {
    object[prop] = props[prop];
  }
};

fabric2(Number, /** @lends {Number} */ { MAX_INTEGER: 9007199254740991 });

暫無
暫無

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

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