/**
* @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:从未在Number上定义属性MAX_INTEGER 第14行第12行
如何在没有预定义的情况下声明动态属性?
UPD:
数[ 'MAX_INTEGER'];
答案 0 :(得分:3)
这属于文档的Restrictions for ADVANCED_OPTIMIZATIONS。您必须使用点分表示法或带引号的语法始终引用属性。混合访问时,编译器可能会重命名虚线访问,但不会触及引用的语法,从而生成错误的代码。
答案 1 :(得分:1)
如果您确实想以这种方式添加属性,您有两种选择:
在externs中添加一个存根声明(这将阻止重命名):
/** @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 });