0

很难描述应用程序,但基本上我需要将“this”作为参数发送,而不是在函数中使用“this”来使用它。情况如下:

paragraph_element.addEventListener( "click", vFlipBP );

这是 vFlipBP 的一部分

/**
 *vFlipBP
 */

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;
    }

.
.
.

问题是即使这是有效的 JavaScript....jshint.com 警告“可能严格违反”

我只是喜欢没有警告......并且不想配置 jshint.com。

我希望我的代码能够 100% 通过,而不必搞乱配置。

挑剔……但正是我想要的。

4

2 回答 2

3

如果您必须更改代码,请执行以下操作:

function vFlipBP( element_or_string ) {
    var previous_page_element,
        previous_tag_element,
        current_page_element,
        select_element = this;
    console.log( 'element_or_string ' + element_or_string ); 
    if( typeof ( element_or_string ) === 'string' ) {
        select_element = document.getElementById( element_or_string );
    } 

您所犯的错误是在来自像 JSHint 这样不那么成熟的工具的“干净”报告中赋予了如此多的价值。在你的函数中打开“use strict”,让实际的 JavaScript 运行时抱怨。

编辑- 根据@minitech 对这个问题的原始化身给出的回答,等待我关于 JSHint 抱怨的假设可能是错误的。如果真的是 JSHint 担心this可能为 null 的情况,那我觉得担心这个警告就更傻了。

于 2012-08-13T20:57:40.940 回答
2

在 javascript 中,有两种方法可以显式声明this在方法被调用时将指向的内容:应用和调用。

vFlipBP.apply(objectYouWantToBeThis, [element_or_string]); 

或者

vFlipBP.call(objectYouWantToBeThis, element_or_string); 
于 2012-08-13T21:04:32.483 回答