Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.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语言吗?_Javascript_Jquery_Jquery Plugins_New Operator_Jslint - Fatal编程技术网

关键字';新';你有JavaScript语言吗?

关键字';新';你有JavaScript语言吗?,javascript,jquery,jquery-plugins,new-operator,jslint,Javascript,Jquery,Jquery Plugins,New Operator,Jslint,我正在为jQuery开发一个插件,我遇到了以下错误: 我还没有找到关于这个JSLint错误或new可能产生的任何副作用的信息 我试过“不要用‘新’来处理副作用”,结果是0。给出了2个结果,但它们都只是引用了JSLint源代码。希望这个问题能改变这一点。:-) 更新#1: 以下是上下文的更多来源: jQuery.fn.fasterTrim = function(options) { return this.each(function() { (new jQuery.fast

我正在为jQuery开发一个插件,我遇到了以下错误:

我还没有找到关于这个JSLint错误或
new
可能产生的任何副作用的信息

我试过“不要用‘新’来处理副作用”,结果是0。给出了2个结果,但它们都只是引用了JSLint源代码。希望这个问题能改变这一点。:-)

更新#1: 以下是上下文的更多来源:

  jQuery.fn.fasterTrim = function(options) {
    return this.each(function() {
      (new jQuery.fasterTrim(this, options));
    });
  };
更新#2:
我使用作为插件的模板,插件中包含该代码。

它抱怨是因为您调用了“new”,但我敢打赌,随后丢弃了返回的对象。为什么代码使用“new”?换句话说,为什么它不只是

jQuery.fasterTrim(this, options);

编辑好的,“启动程序”工具以这种方式生成代码,因为它确实希望创建一个新对象,是的,它确实是为了利用副作用。“Starter”生成的构造函数代码使用jQuery“data”功能将对新对象的引用隐藏在受影响的元素上。

您使用的是
new
执行一些操作,而不是创建对象并返回它。JSLint认为这是对
new
的无效使用

您可以这样使用它:

var x = new SomeConstructor();
SomeMethod();
new SomeCosntructor(args);
或者执行如下操作:

var x = new SomeConstructor();
SomeMethod();
new SomeCosntructor(args);
但切勿使用new来执行以下操作:

var x = new SomeConstructor();
SomeMethod();
new SomeCosntructor(args);

这样做被认为是使用
new
来产生副作用,因为您没有使用它来创建对象。

基本上JavaScript是一个缓慢的野兽,因此创建一个新对象只是为了调用一个函数是非常低效的。不管怎样,函数是静态的

$.fasterTrim(this, options);
给你一个理由:

构造函数是 设计用于新的 前缀新前缀将创建一个新的前缀 基于函数的 原型,并将该对象绑定到 函数的隐含参数是这个参数。 如果忽略使用新前缀, 不会制造新对象,并且此 将绑定到全局对象。 这是一个严重的错误

JSLint强制执行以下约定: 构造函数不能被命名 首字母大写。JSLint有 不期望看到一个函数 以大写字母开头的调用 名称,除非它有新的前缀。 JSLint不希望看到新的 与名称相同的函数一起使用的前缀 不要以大写字母开头。 这可以用newcap控制 选择权

JSLint不希望看到 包装器形成新的数字,新的字符串, 新布尔值

JSLint不希望看到新的 对象(改为使用{})

JSLint不希望看到新的 数组(改为使用[])

发件人:


回答这个问题,“不要使用新的药物治疗副作用”是指:

不要使用新的用于 构造函数将对其参数进行修改 但是要创建一个对象,副作用 在建设者是BAAAD


Travis,我是
Starter
站点的开发者

@尖头击中了头上的钉子。这样编写启动程序代码的原因是因为我们确实需要一个新对象,我们不需要在该点上存储对它的引用

只需将命令从

(new jQuery.fasterTrim(this, options)); 

正如你所发现的那样,会安抚JSLint

Starter插件设置遵循jQueryUI模式,将对象的引用存储在元素的
数据集中。这就是正在发生的事情:

  • 创建新对象(通过新建)
  • 使用jQuery的
    data
    $(el.data('FasterTrim',this)
  • 返回的对象没有任何用处,因此没有进行
    var
    声明。我将研究如何更改声明并清理输出,以便将JSLint从盒子中传递出去

    再多一点背景知识

    使用
    数据存储对象的好处在于,我们可以在以后的任何时候通过调用:
    $(“#您的#选择器”).data('FasterTrim')
    来访问对象。然而,如果您的插件不需要以这种方式在中途访问(也就是说,它只需一次调用就可以建立起来,并且不会提供未来的交互),那么就不需要存储引用


    如果您需要更多信息,请告诉我。

    好吧,他正在创建一个对象,但他正在将其扔掉:-)我更新了问题以显示周围的源代码,源于起始代码。我仍然不理解。我如何创建一个类似于原型PeriodicalExecuter的东西?推荐的API未通过此jslint检查。这些指南是针对最佳实践的。原型库不遵循这种特殊的实践。所以,你得将就一下。您可以保留错误,也可以将结果分配给局部变量,即使您不使用它。我更新了问题以显示周围的源代码,源于启动程序代码。js lint检测到的问题是创建一个新对象并将其丢弃。基本上,jslint假设返回值未存储的新调用必须引起副作用(否则为什么要实例化它),而具有副作用的构造函数通常是糟糕的设计。Js lint告诉您fastTrim使用了糟糕的设计。只需使用$.fasterTrim(“Hello”)@Juan嗯,看起来“初学者”工具生成了这些代码,所以提问者基本上就是这些东西的受害者。我刚才自己也用过这个页面,很确定这就是它给你的模式。我不知道为什么。也许有更好的方法,虽然我不是形式主义者,所以我不能开任何处方。如果您使用的是Starter工具(看起来真的没那么糟糕),那么您可能希望忽略这个JSLint错误。在我看来,初学者代码恰好做到了这一点并不是那么邪恶。关于构造函数,有副作用是件坏事,这是一个有趣的观点。我是