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