Jshint.com | 给'this'赋值

3
在 jshint.com 上,每当我执行以下操作:
var this_hold = this;

我遇到了一个错误。

我遇到了严格模式的违规错误。

我的应用程序需要使用这个(从事件处理程序传递进来的)或者我需要自己使用 document.getElementById() 来获取元素。

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

我想要消除这个错误..我不想关闭它。我希望 jshint.com 百分之百满意。

以下是有问题的函数,其中包含违规注释。

/**
 *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;
}
2个回答

1

你不能给this赋值,它是只读的。

然而,将this的值赋给另一个变量并不是错误的,也不违反"use strict"规则。


第15行:select_element = this;可能存在严格违规。 - user656925
@HiroProtagonist 这是从JSLint还是什么地方来的?如果是的话,JSLint真的很愚蠢;它经常犯这种荒谬的错误。基本上,它没有跟踪变量已经用var正确声明的事实。 - Pointy
很不幸,这些分析工具的解析器非常薄弱。这就是为什么它会说“可能存在严格违规行为”。 - Pointy
1
嘿,JSHint维护者们,对于那个“弱”的评论,我很抱歉 :-) - Pointy

1

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

有关validthis和其他选项的更多信息,请参阅我们的文档:http://www.jshint.com/docs/


不需要因为不使用选项而感到自豪。JSHint 的存在并不是为了告诉你如何编码,而是为了帮助你发现潜在的问题。由于静态分析只能帮你做到这一步,我们总会有误报的情况。 - Anton Kovalyov
好的...我终于还是做到了...没有设置选项...没有错误...实际上有多个修复...请参见此帖子...http://stackoverflow.com/questions/11961735/jshint-passing-default-settings-function-declarations-and-this。 - user656925

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接