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がthisnullかもしれないと心配しているのなら、警告を心配するのはもっとばかげていると思います。

于 2012-08-13T20:57:40.940 に答える
2

javascriptではthis、メソッドが呼び出されたときにメソッド内で何を指すかを明示的に示す2つの方法があります。applyとcallです。

vFlipBP.apply(objectYouWantToBeThis, [element_or_string]); 

また

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