javascript - Google 闭包编译器,JSC_INEXISTENT_PROPERTY 问题与 mixin/extend

标签 javascript build compiler-errors compiler-warnings google-closure-compiler

以下代码在使用 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();
    }
 });

最佳答案

根据Closure documentation ,

@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/

相关文章:

build - 清洁构建 Chrome

java - 在 Install4j 中处理不同的发布计划

compiler-errors - 我无法从 Ubuntu 到 Windows 进行交叉编译

macos - 在 macOS 11.3.1 和最新的 Docker 社区版本之后无法拉取和构建 docker 镜像

generics - Java 8通配符类型不能直接实例化

c++ - 头文件没有看到其他头标识符

javascript - 如何修复 Tempus Dominus datetimepicker 中未定义的 "Uncaught TypeError: Cannot read property ' 格式?

javascript - 即使应用 {% load static %},Django 静态文件也不会加载到 block 内容中

javascript - 在 javascript 中,如果数组、函数是对象原型(prototype),那么为什么 typeof 返回

javascript - 在 Angular 中将数据附加到 $scope 的不同方法