Javascript 使用.bind(this)和使用JSlint ES5在函数类内部包装之间的区别

Javascript 使用.bind(this)和使用JSlint ES5在函数类内部包装之间的区别,javascript,this,bind,jslint,Javascript,This,Bind,Jslint,很抱歉,如果我问了类似的问题,我会尝试更好地理解JS和JSlint,以及这个/.bind(这个)是如何联系在一起的 我下面有3个我正在使用的示例。我已经弄明白了为什么示例1和3的行为方式是这样的 例如,我无法理解为什么JSlint会抱怨.bind中的“.”(这个) 例如3,我想知道是否有一种方法可以优化它 可以将代码复制并粘贴到中,以查看实际的结果 示例1:没有JSlint警告。 问题是“this”并不是指窗口或对象,这就是为什么它是未定义的,这就是为什么它不能设置“this.c”。非常不言自明

很抱歉,如果我问了类似的问题,我会尝试更好地理解JS和JSlint,以及这个/.bind(这个)是如何联系在一起的

我下面有3个我正在使用的示例。我已经弄明白了为什么示例1和3的行为方式是这样的

例如,我无法理解为什么JSlint会抱怨.bind中的“.”(这个)

例如3,我想知道是否有一种方法可以优化它

可以将代码复制并粘贴到中,以查看实际的结果

示例1:没有JSlint警告。 问题是“this”并不是指窗口或对象,这就是为什么它是未定义的,这就是为什么它不能设置“this.c”。非常不言自明

/*jslint devel:true, browser:true, this:true*/
/*global $, window*/

$(function () {
    "use strict";
    window.myApp = (function () {
        this.c = "c";

        this.main = function () {
            console.log("MAIN ", this.c);
        };
        this.main();
    }());
}());
示例2:JSlint抱怨.bind中的“.”(这一点),但在其他方面代码都正常工作 [jslint]意外的“.”。(a)

示例3:包装函数类应用程序内部 在这种情况下,JSlint不会显示任何错误/警告,它执行时不会出现问题,并且所有对象都可以访问

/*jslint devel:true, browser:true, this:true*/
/*global $, window*/

$(function () {
    "use strict";
    window.myApp = (function () {
        function App() {
            this.a = "a";

            this.main = function () {
                console.log("MAIN ", this.a);
            };
        }
        var t = new App();
        t.main();
    }());
}());

我可以想象JSLint希望您使用
(function(){})。bind(this)
而不是
(function(){}.bind(this))
。正如旁注一样,不使用严格模式也可以解决问题,就像在非严格
中一样,iLife中的此
始终是全局对象。@FelixKling我曾经尝试过使用。绑定外部范围。JSlint没有抱怨,当代码执行时,所有人都认为“this”是未定义的。@adeneo通过禁用严格模式,当然不会显示问题,尽管这不能帮助我理解问题,也不能使它在严格模式下工作。@AlexD:
未定义与括号位置无关。
/*jslint devel:true, browser:true, this:true*/
/*global $, window*/

$(function () {
    "use strict";
    window.myApp = (function () {
        function App() {
            this.a = "a";

            this.main = function () {
                console.log("MAIN ", this.a);
            };
        }
        var t = new App();
        t.main();
    }());
}());