Javascript Google闭包编译器,JSC_不存在_属性问题与mixin/extend

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

下面的代码在使用google closure编译器高级模式编译时抛出警告/错误

JSC_不存在_属性:从未在播放器上定义属性getJerseyNumber

有没有办法解决这个问题

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闭包编译器。