Javascript 发送';这';作为参数|是否可能?

Javascript 发送';这';作为参数|是否可能?,javascript,Javascript,很难描述应用程序,但基本上我需要将“this”作为参数发送,而不是使用函数中的“this”来提供。情况如下: paragraph_element.addEventListener( "click", vFlipBP ); 这里是vFlipBP的一部分 /** *vFlipBP */ function vFlipBP( element_or_string ) { var previous_page_element, previous_tag_element,

很难描述应用程序,但基本上我需要将“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%通过,而不必对配置造成麻烦


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

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

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
可能为空,那么我认为担心警告更愚蠢

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

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
可能为空,那么我认为担心警告更愚蠢

在javascript中,有两种方法可以显式地声明调用方法时该将指向的内容:apply和call

vFlipBP.apply(objectYouWantToBeThis, [element_or_string]); 


在javascript中,有两种方法可以显式地声明调用该方法时该将指向的内容:apply和call

vFlipBP.apply(objectYouWantToBeThis, [element_or_string]); 



有没有什么引人注目的、令人信服的理由让你不能将其命名为其他名称?事件处理程序的第一个参数是事件对象,你的代码没有意义。@HiroProgator为了解决工具中的错误而对完美的代码进行更改是没有意义的。关于这一点,有3个问题?等等,真的吗?代码运行良好,解析器中有一个bug,他已经被告知了,而且他在OCD上浪费了我们更多的时间?有什么惊人的、令人信服的理由不能将其命名为其他名称吗?事件处理程序的第一个参数是事件对象,你的代码没有意义。@HiroProgator为了解决工具中的错误而对完美的代码进行更改是没有意义的。关于这件事的3个问题?等等,真的吗?代码运行良好,解析器中有一个bug,他已经被告知了,他在OCD上浪费了我们更多的时间?@hiroprotation很好,但是你仍然会发现JSHint不知道发生了什么。如果我知道如何将我的函数更改为“构造函数”-新的vFlipBP(),然后,这将删除警告…基本上,当它看到这一点时,它需要一个构造函数…这很奇怪;我不知道为什么要发出这样的警告,因为在JavaScript中,很难(通常不可能)进行分析来确定表达式何时可能为空。我不确定你的意思……我想说的是jshint.com希望“this”与“new”一起使用,在编译语言中,这通常与实例化(新)对象关联。是的,但在许多其他情况下使用
this
,比如事件处理程序之类的。我很少使用
new
,但我的代码总是引用
this
。@hiroprotation很好,但你可能仍然会发现JSHint不知道发生了什么。如果我知道如何将我的函数更改为“构造函数”-new vFlipBP(),然后,这将删除警告…基本上,当它看到这一点时,它需要一个构造函数…这很奇怪;我不知道为什么要发出这样的警告,因为在JavaScript中,很难(通常不可能)进行分析来确定表达式何时可能为空。我不确定你的意思……我想说的是jshint.com希望“this”与“new”一起使用,在编译语言中,这通常与实例化(新)对象关联。是的,但在许多其他情况下使用
this
,比如事件处理程序之类的。我很少使用
new
,但我的代码总是引用
this