Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么JSLint会禁止;这";关键词?_Javascript_This_Jslint - Fatal编程技术网

Javascript 为什么JSLint会禁止;这";关键词?

Javascript 为什么JSLint会禁止;这";关键词?,javascript,this,jslint,Javascript,This,Jslint,考虑这个简单的例子: "use strict"; var Foo = { field: 0, func: function () { this.field = 4; } } 抛出错误: 意外的“这个”。在“this.field=4”行 在StackOverflow中,我似乎提出了一些问题,在所有情况下,答案都是启用“容忍此”标志。然而,我感兴趣的是,为什么JSLint创建者认为使用“this”是(或可能导致)错误 另外,如果没有“this”关键字,并且不

考虑这个简单的例子:

"use strict";
var Foo = {
    field: 0,
    func: function () {
        this.field = 4;
    }
}
抛出错误:

意外的“这个”。在“this.field=4”行

在StackOverflow中,我似乎提出了一些问题,在所有情况下,答案都是启用“容忍此”标志。然而,我感兴趣的是,为什么JSLint创建者认为使用“this”是(或可能导致)错误

另外,如果没有“this”关键字,并且不希望用户将实例作为第一个参数传递,我将如何实现成员函数

编辑也许我在这个问题上说得不够清楚,尽管看起来很相似,但我没有回答我的问题:


这个问题的问题不是问题本身,而是它得到的答案。请注意,公认的答案是:“我的建议是:告诉JSLint闭嘴”。我在我的帖子中特别指出,这对我来说不是一个有效的答案,因为我想了解为什么JSLint禁止使用这个选项,而不是如何避免这个错误。

正如@pdenes在评论中指出的,这里对这个话题进行了一些讨论:

还有一个例子,道格拉斯在其中公开了他的一些观点,并提出了一个(在他看来)更好的方法来创建构造函数

建议的构造函数模式如下所示(直接取自他的演讲,它还说明了ES6的一些特性):

按照我的理解,“模式”是为了避免使用“this”和任何其他对象创建方式(通过new或object.create),同时也避免原型继承

此时,构造函数现在是一个返回对象的函数(在本例中是冻结的,但实际上不需要)

所有“面向对象”的东西都是通过将成员和方法存储在构造函数的闭包中来实现的,成员函数可以按名称引用这些成员和方法,因为它们存在于当前范围中。这成功地避免了使用“this”


不幸的是,我从中得到的真正答案是,在javascript中创建对象有许多复杂的方法,而且在我看来,每种方法都有其缺陷。JSLint是一个很好的工具,但是如果没有做一些研究并理解为什么会出现这些错误,就不应该使用它。尤其是当没有提供真实、全面的理由时。甚至作者也没有这样做。

请注意,JSLint不仅禁止可能导致错误的事情。它“强迫”你使用特定的编码风格。我想特别指出的是,在我的问题中,它与我正在“复制”的编码风格不同,尽管没有具体引用链接。特别是当我说:“在StackOverflow中,我似乎有一些问题在问这个问题,在所有情况下,答案都是启用“容忍这个”标志。”我指的正是这个问题,以及其他问题。请注意,在我看来,这个问题中被接受的答案是不可接受的,因为禁用错误并不能解释错误的原因和原因。@meskobalazs,很高兴知道。尽管如此,我还是很好奇什么是避免“this”的“好”编码风格,以及为什么根据JSLint的说法,“this”关键字的这种明显正确使用是有缺陷的。你应该问道格拉斯·克罗克福德:)也许他把它写在了好的部分。我认为从重复的问题中得到的公认答案毫无帮助,但还有另一个,关于不同类型的继承,这里有更详细的答案。此外,研究人员还说:“在语言中包含这一点会使谈论语言变得更加困难。这就像是与Abbott和Costello进行配对编程。避免使用这一点。”(但这仍然不能真正解释为什么…:-)这是一个很好的答案。在这里接受您自己的答案当然是公平的,这样我们就可以把它从JSLint未回答池中划掉。事实上,最好是删除这个重复并在另一个问题上公布你的答案。我什么时候没看过那个视频。你的回答会有帮助的。我确实理解你所做的“避免”和“理解”之间的差异,但这有助于帮助每个人理解谁可能会无意识地避免。(就我个人而言,我不明白任何JSLint的答案怎么会是“不要使用JSLint”&这种情况经常发生。)
function constructor(specs) {
    let {member} = spec, 
        {other} = other_constructor(spec),
        method = function() {

        };
    return Object.freeze({
        method,
        other
    });
}