将'this'作为参数发送|可能吗?

时间:2012-08-13 20:50:22

标签: javascript

很难描述应用程序,但基本上我需要发送'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%而不必进行配置。

挑剔......但我只是想要它。

2 个答案:

答案 0 :(得分: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运行时抱怨。

编辑 - 等待我对JSHint所关注的假设可能是错误的,根据@minitech对这个问题的原始化身的回答。如果真的是JSHint担心this可能为空,那么我认为担心警告更为愚蠢。

答案 1 :(得分:2)

在javascript中,有两种方法可以明确说明调用时this在方法中指向的内容:apply和call。

vFlipBP.apply(objectYouWantToBeThis, [element_or_string]); 

vFlipBP.call(objectYouWantToBeThis, element_or_string);