Jshint.com |分配给“这个”

Posted

技术标签:

【中文标题】Jshint.com |分配给“这个”【英文标题】:Jshint.com | Assigning to 'this' 【发布时间】:2012-08-10 02:45:06 【问题描述】:

每当我这样做时都在 jshint.com 中

var this_hold = this;

我收到一个错误。

我违反了严格错误。

应用程序是这样的,我需要使用这个(从事件处理程序传入)或者我需要自己使用 document.getElementById() 拉取元素

这就是这个函数的最佳工作方式......否则我必须为每种情况编写两次。

我希望错误消失..我不想将其关闭。我希望 jshint.com 100% 快乐。

这里是有问题的功能与违规评论

/**
 *vFlipBP - eliminate select_element in favor of 'this'
 */

function vFlipBP( element_or_string ) 
    var previous_page_element,
        previous_tag_element,
        current_page_element,
        select_element;
    console.log( 'element_or_string ' + element_or_string ); 
    if( typeof ( element_or_string ) === 'string' ) 
        select_element = document.getElementById( element_or_string );
     else 
        select_element = this;  // violation of strict here
    
    if( vFlipBP.previous_id === undefined ) 
        var probe_id = select_element.parentElement.firstChild.id;
        if ( ( probe_id === select_element.id ) && ( select_element.parentElement.firstChild.nextSibling ) ) 
            probe_id = select_element.parentElement.firstChild.nextSibling.id;
            vFlipBP.previous_id = probe_id;
         else 
            vFlipBP.previous_id = select_element.id;
        
    
    current_page_element = document.getElementById( select_element.id + '_page' );
    current_page_element.style.display = '';
    select_element.style.background = "#eeeeee";
    if( vFlipBP.previous_id !== select_element.id ) 
        previous_page_element = document.getElementById( vFlipBP.previous_id + '_page' );
        previous_tag_element = document.getElementById( vFlipBP.previous_id );
        if( ( ( previous_page_element !== current_page_element ) ) && ( previous_page_element !== null ) ) 
            previous_page_element.style.display = 'none';
            previous_tag_element.style.background = "#ffffff";
        
    
    vFlipBP.previous_id = select_element.id;

【问题讨论】:

【参考方案1】:

你不能分配给this;它是只读的。

但是,将this 的值分配给另一个变量是不是错误的,并且不违反“使用 stict”规则。

【讨论】:

第 15 行:select_element = this;可能严格违反。 @HiroProtagonist 是来自 JSLint 还是什么?如果是这样,JSLint 真的很笨;它经常犯这样的傻瓜错误。基本上它没有跟踪变量是用var正确声明的事实。 不幸的是,这些分析工具的解析器非常弱。这就是为什么它说“可能严格违反。” 嗨 JSHint 维护者对“弱”评论感到抱歉:-)【参考方案2】:

您可以使用选项validthis 来关闭该警告。不幸的是,您不能仅通过静态分析来检测所有严格模式违规,因此 JSHint 会做出猜测——有时它是错误的。

更多关于 validthis 和我们文档中的其他选项:http://www.jshint.com/docs/

【讨论】:

没有必要为不使用选项而自豪。 JSHint 不是用来告诉你如何编码的——它是用来帮助你发现潜在问题的。而且由于静态分析只能为您提供到目前为止的信息,因此我们总是会出现误报。 好吧...无论如何我终于做到了...没有设置选项...没有错误...实际上有多个修复...请参见此处的帖子...***.com/questions/11961735/…。

以上是关于Jshint.com |分配给“这个”的主要内容,如果未能解决你的问题,请参考以下文章

将这个复活节彩蛋分配给一个变量

最终的局部变量不能分配,不能分配给非最终变量

这个错误说明了啥?类型“ParsedQs”不可分配给类型“字符串”

为啥将 python 命令分配给 sh var?这个文件有啥作用? [关闭]

ORACLE 数据库权限分配,我想分配给某个用户创建视图并只能能查看修改自己创建的视图的权限 这个怎么弄

将字符串文字分配给 char* [重复]