[英]Closure compiler: How to declare object and all of its properties as extern?
[英]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.