Javascript Google闭包编译器,JSC_不存在_属性问题与mixin/extend
下面的代码在使用google closure编译器高级模式编译时抛出警告/错误 JSC_不存在_属性:从未在播放器上定义属性getJerseyNumber 有没有办法解决这个问题Javascript Google闭包编译器,JSC_不存在_属性问题与mixin/extend,javascript,build,compiler-errors,compiler-warnings,google-closure-compiler,Javascript,Build,Compiler Errors,Compiler Warnings,Google Closure Compiler,下面的代码在使用google closure编译器高级模式编译时抛出警告/错误 JSC_不存在_属性:从未在播放器上定义属性getJerseyNumber 有没有办法解决这个问题 var getDetails = { getJerseyNumber: function() { return Math.random(); } }; /** * @param {Object} source * @param {Object} delta */ function mix
var getDetails = {
getJerseyNumber: function() {
return Math.random();
}
};
/**
* @param {Object} source
* @param {Object} delta
*/
function mixIn(source, delta) {
for (var i in delta) {
source[i] = delta[i];
}
}
/**
* @type {{name: string , sport: string}}
*/
var player = {
name: 'Tom Brady',
sport: 'Football'
};
mixIn(player, /** @lends {player} */ getJerseyNumber);
alert(player.getJerseyNumber());
使用@lends只能处理对象文字。所以添加这一行会有用,但还有其他想法吗
mixIn(player, /** @lends {player} */ {
getJerseyNumber: function() {
return Math.random();
}
});
据报道,
@贷款
指示应将对象文字的键视为其他某个对象的属性。此注释应仅出现在对象文字上
本文将对此进行更详细的描述
例如,我将使用类来实现常见行为
/**
* @constructor
* @param {string} name
* @param {string} sport
*/
var Player = function(name, sport) {
this.name = name;
this.sport = sport;
};
Player.prototype.getJerseyNumber = function() {
return Math.random();
};
var player = new Player('Tom Brady', 'Football');
alert(player.getJerseyNumber());
当然,我想象你的例子有一些额外的复杂性,但是如果没有代码来表示这种复杂性,我只能猜测这是什么
您可能需要建议的(但目前还不存在)注释。提供的代码示例是解决上述问题的一个很好的演示,但基本上我正在寻找一种让编译器识别多个混合的方法。这是一个方便的JS编程构造,被大量使用(使用它的一个流行代码库是jquery)。看起来这将不得不等到这个mixin特性进入google闭包编译器。