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

时间:2017-07-19 22:09:09

标签: javascript this bind jslint

很抱歉,如果我问类似的问题,我试图更好地了解JS与JSlint以及这个/ .bind(this)如何联系到它。

我正在使用下面的3个例子。我已经弄清楚为什么示例1和3的行为方式如此。

例如2,我无法弄清楚为什么JSlint抱怨"。"在.bind(this)。

例如3,我想知道是否有办法优化它?

可以将代码复制并粘贴到http://www.jslint.com/中以查看结果。

示例1:没有JSlint警告。

问题是"这个"不引用窗口或对象,这就是它未定义的原因,这就是为什么它不能设置" 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(this)中,但代码正在运行

[jslint]出乎意料的'。'。 (unexpected_a)

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

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

        this.main = function () {
            console.log('MAIN ', this.b);
        };
        this.main();
    }.bind(this)());
}.bind(this));

示例3:包装函数类App

在这种情况下,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();
    }());
}());

0 个答案:

没有答案