繁体   English   中英

为什么JSHINT抱怨这是一个严格的违反行为?

[英]Why is JSHINT complaining that this is a strict violation?

我认为这可能与使用此关键字并显示模块模式严格违规行为重复

我有以下代码:

function gotoPage(s){
    if(s<=this.d&&s>0){this.g=s; this.page((s-1)*this.p.size);}
}

function pageChange(event, sorter) {
    var dd = event.currentTarget;
    gotoPage.call(sorter, dd[dd.selectedIndex].value);
}

JSHINT(JSLINT)在抱怨。 它说“严格违反”。 对于突出显示的行:

在此处输入图片说明

我使用Function.call()然后引用该实例是否有点不合适?

这被认为是不好的风格吗?

JSHint表示“可能严格违反”,因为据您所知,您正在内部使用this方法,而这并不是一种方法。

在非严格模式时,调用gotoPage(5)将结合this全局对象( window中的浏览器)。 在严格模式下, this将是undefined ,您会遇到麻烦。

大概,您的意思是在绑定this上下文的情况下调用此函数,例如gotoPage.bind(myObj)(5)gotoPage.call(myObj, 5) 如果是这样,您可以忽略JSHint,因为不会产生任何错误。 但是,它告诉您,您的代码对于任何阅读它的人来说都不是很清楚,因为在显然不是一种方法的内部使用this代码会造成很大的混乱。 最好简单地将对象作为参数传递:

function gotoPage(sorter, s) {
    if (s <= sorter.d && s > 0) {
        sorter.g = s;

        sorter.page((s - 1) * sorter.p.size);
    }
}

function pageChange(event, sorter) {
    var dd = event.currentTarget;
    gotoPage(sorter, dd[dd.selectedIndex].value);
}

我收到此消息的功能不是以大写字母开头的。

"use strict";

// ---> strict violation
function something() {
    this.test = "";
}


// ---> just fine (note the capital S in Something)
function Something() {
    this.test = "";
}

如果将函数声明为变量而不是使用标准函数声明,则jshint不会将其标记为严格违规。 因此,您可以执行以下操作-

var gotoPage = function (s){
    if(s<=this.d&&s>0){this.g=s; this.page((s-1)*this.p.size);}
};


var pageChange = function (event, sorter) {
    var dd = event.currentTarget;
    gotoPage.call(sorter, dd[dd.selectedIndex].value);
};

如果您尝试实现一种方法,则可能需要分配给原型:

ExampleClassName.protytpe.gotoPage = function gotoPage(s){
  // code using this
};

分配功能时,JSHint不会发出警告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM