以下代码在使用 google 闭包编译器高级模式编译时会抛出警告/错误。
JSC_INEXISTENT_PROPERTY: Property getJerseyNumber never defined on player
有什么办法可以解决这个问题吗?
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();
}
});
最佳答案
@lends
Indicates that the keys of an object literal should be treated as properties of some other object. This annotation should only appear on object literals.
这在 jsdoc-toolkit 中有更详细的描述。 .
对于您的示例,我会使用类来实现常见行为。
/**
* @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());
当然,我想你的例子有一些额外的复杂性,但没有代码来表示这种复杂性,我只能猜测那是什么。
您可能在提议之后(但目前还不存在)@mixin注释。
关于javascript - Google 闭包编译器,JSC_INEXISTENT_PROPERTY 问题与 mixin/extend,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27558842/