使用谷歌闭包编译器高级模式编译时,下面的代码会抛出警告/错误。
JSC_INEXISTENT_PROPERTY:属性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();
}
});
答案 0 :(得分:2)
<强> @lends 强>
表示应将对象文字的键视为某些其他对象的属性。 此注释应仅出现在对象文字上。
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注释。