【问题标题】:is better written in dot notation after function object constructor在函数对象构造函数之后最好用点表示法编写
【发布时间】:2023-11-16 03:17:01
【问题描述】:

我有以下代码在 jshint 中生成警告:

['$inject'] 最好用点表示法编写

function Config () {
}

/* jshint -W069 */
Config['$inject'] = ['$routeProvider'];

但是,以下操作按预期工作(警告静音):

var Config = {}  
/* jshint -W069 */
Config['$inject'] = ['$routeProvider'];

如何使用函数来构建我的对象并仍然能够使警告静音?

谢谢

【问题讨论】:

    标签: angularjs jslint jshint


    【解决方案1】:

    用点符号写就行了:

    Config.$inject = ['$routeProvider'];
    

    当您使用有效标识符作为方括号样式成员表达式中的成员标识符时,JSHint 会引发该警告。没有理由这样做 - 点符号更短。


    如果这不是一个选项(从您的 cmets 中显示),您可以尝试将相关代码包装在一个函数中。 JSHint 似乎只在出现在函数范围内时才服从指令。例如:

    (function () {
        function Config() { /* ... */ }
        /* jshint -W069 */
        Config['$inject'] = ['$routeProvider'];
    }());
    

    【讨论】:

    • “编译”是做什么的?代码如何处理该过程?任何缩小过程都不应重命名属性标识符。
    • 闭包编译器高级编译确实..! :)
    • @Nicolas - 哦,是的。我忘记了 Closure,我很久以前就放弃了,现在改用 UglifyJS!我已经用一个可能的解决方案更新了答案,但不幸的是,看起来没有更好的方法来做到这一点。
    【解决方案2】:

    就我而言,最佳做法是为闭包编译器打开以下标志:

    angular_pass: 真

    并使用以下注释:

    /**
     * @description App configuration
     * @param {!angular.$routeProvider} $routeProvider
     * @constructor
     * @ngInject
     */
    

    因此我们不需要使用下面的

    Config['$inject'] = ['$routeProvider'];
    

    【讨论】: