从将传递 jslint 的同一对象中的函数调用另一个函数的正确方法是啥?

Posted

技术标签:

【中文标题】从将传递 jslint 的同一对象中的函数调用另一个函数的正确方法是啥?【英文标题】:What is the proper way to call another function from a function within the same object that will pass jslint?从将传递 jslint 的同一对象中的函数调用另一个函数的正确方法是什么? 【发布时间】:2021-07-10 01:42:54 【问题描述】:

从将传递 jslint 的同一对象中的函数调用另一个函数的正确方法是什么?

任何信息将不胜感激!

用于说明目的的简单示例:

(function () 
    "use strict";

    var myObject = 
        functionOne: function () 
            console.log("functionOne called by functionTwo");
        ,
        functionTwo: function () 
            // jslint Error: 'myObject' is out of scope. (out_of_scope_a);
            // What is the proper way to call another function inside the same Object that will pass jslint?
            myObject.functionOne();

            // jslint Error: Unexpected 'this'. (unexpected_a);
            // What is the proper way to call another function inside the same Object that will pass jslint?
            this.functionOne();
        
    ;

    myObject.functionTwo();
());

【问题讨论】:

我从您的代码中看到的唯一错误是Unexpected 'this'.myObject.functionOne(); 不会导致你描述的错误 this post 中的一些好建议。我会特别关注“告诉 JSLint 闭嘴……或者根本不要使用 JSLint” 是的,我强烈推荐使用更可配置、更少固执、更现代的东西,比如 ESLint。 感谢您的回复。 @CertainPerformance 你让我走上了正确的轨道。我有一个过时的 jslint 版本。最新版本不介意 myObject.functionOne(); 【参考方案1】:

添加指令/*jslint devel, this*/ 应该可以修复它。选项/指令的完整列表可用@https://www.jslint.com/

/*jslint devel, this*/
(function () 
    "use strict";

    var myObject = 
        functionOne: function () 
            console.log("functionOne called by functionTwo");
        ,
        functionTwo: function () 
            // jslint Error: 'myObject' is out of scope. (out_of_scope_a);
            // What is the proper way to call another function inside the
            // same Object that will pass jslint?
            myObject.functionOne();

            // jslint Error: Unexpected 'this'. (unexpected_a);
            // What is the proper way to call another function inside the same
            // Object that will pass jslint?
            this.functionOne();
        
    ;

    myObject.functionTwo();
());

【讨论】:

没有必要使用this 指令。您很熟悉 Crockford 的批评,即使用 this 使 javascript 代码像 Abbott 和 Costello 短剧! ;^D 按照我的回答重构,您可以跳过该快捷方式——并拥有更易于管理的代码!【参考方案2】:

专业提示:在修复代码时避免使用任何非必要的 jslint 指令,以最大限度地发挥 JSLint 的优势。

JSLint 希望您像这样安排您的代码(不需要this。尽可能避免使用this):

/*jslint devel */
(function () 
    "use strict";
    var myObject;

    function functionOneDef() 
        console.log("functionOne called by functionTwo");
    

    function functionTwoDef() 
        functionOneDef();
    

    myObject = 
        functionOne: functionOneDef,    
        functionTwo: functionTwoDef
    ;

    myObject.functionTwo();
());

【讨论】:

以上是关于从将传递 jslint 的同一对象中的函数调用另一个函数的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用胖箭头(放屁)语法定义函数时,vim中的JSlint错误

C ++将多个对象传递给线程中的函数

JSLint 错误:“将调用移动到包含函数的括号中”

将对象从一页移动到另一页?

js中的applycallcalleecaller的区别

JS-函数参数