2016-09-28 7 views
0

私はhereから次のスクリプトを持っている:`if(document.createEvent){..}`関数の呼び出しはかっこなしで呼び出すのですか?

function download(filename, text) { 
    var pom = document.createElement('a'); 
    pom.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text)); 
    pom.setAttribute('download', filename); 

    if (document.createEvent) { 
     var event = document.createEvent('MouseEvents'); 
     event.initEvent('click', true, true); 
     pom.dispatchEvent(event); 
    } 
    else { 
     pom.click(); 
    } 
} 

download('test.txt', 'Hello world!'); 

今私はif (document.createEvent)の使用方法を理解ドント:

私は質問In JavaScript, does it make a difference if I call a function with parentheses?のための答えを読んで、他のいくつかの質問をお読みください。

ほとんどの例では、window.onload = initAll;またはvar ret = Multiply;のような参照がありますが、ここではそうではありません。私にとって最も興味深い例があった。ここで

function Multiply(operator, operand) { 
    return operator * operand; 
} 
var operator = 3; 
var operand = 4; 
var ret = Multiply; 

、著者によると、Multiplyが実行され、機能Multiplyからret参照されません。

here括弧なしで関数を呼び出すことは参照であると言われています。

しかし、私には、イベントを作成する関数であるdocument.createEventへの参照が意味をなさないので、私はさらに混乱してしまいます。

document.createEvent()のようなドキュメントは、hereのように、パラメータなしの使用法を指摘していません。

だから、私の脳の闇に光をあげてください。 私はあなたの助けに感謝します。

質問(ショート):

  • は、関数呼び出しまたは参照document.createEventですか?
  • document.createEventは何を返しますか?
+1

document.createEvent関数が存在するかどうかを確認しています。それはまったくそれを呼んでいない。 JavaScript関数ではファーストクラスのオブジェクトであり、そのように扱うことができます。 –

+1

ブラウザが 'document.createEvent'をサポートしているかどうかをチェックしています。そうでない場合は別の方法を使用します。 – deceze

+0

オペレータのない[JavaScriptのIfステートメント条件の重複の可能性がありますか?それは何ですか?](http://stackoverflow.com/questions/3494614/javascript-if-statement-condition-with-no-operator-what-does-it-do) - これはまったく同じテクニックです。 – Xufox

答えて

1

1 - JavaScriptがtruthyfalsy値を持っています。 0、 ""、undefined、nullなどの値は、falsyの値で、1、-1、または "text"です。たとえば、オブジェクトの既存のプロパティはtruthyです。 (その値が偽でない場合) 2からcreateEventの文書オブジェクトのプロパティであり、コードスニペットは基本的にその関数の存在をテストします。つまり、その存在は真実です。私はこのチェックがブラウザの互換性&メソッドの非推奨に関連していると仮定します。 詳細を読むことができますhere

+0

私は、この答えが最良であると判断しました。なぜなら、if文が "t​​rue"と評価されるのはどのような戻り値が受け入れられるかを参照するからです。しかし、私はすべての良いことがあるので、他の答えをupvoted。ありがとう。 – goulashsoup

2

document.createEventは、関数呼び出しまたは参照ですか?

documentオブジェクトのプロパティを表す式です。値は、イベントを作成するFunctionオブジェクトへの参照であることが予想されますが、undefinedでもかまいません。

document.createEventは何を返しますか?

式として、このプロパティの現在の値を評価します。

3

document.createEventは関数呼び出しまたは参照ですか?

documentオブジェクトのプロパティにアクセスしようとしています。

そのプロパティが存在する可能性があります。それは価値があるかもしれません。その値は関数への参照かもしれません。

これらのすべてが該当する場合は、真の値になります(ブロックが実行されるのはif)。それが存在しない場合、それは偽の値になります(そして、elseブロックが実行されます)。

これは、ブラウザがこの機能をサポートしているかどうかを確認するテストです。

document.createEventは何を返しますか?

プロパティの値。ブラウザがcreateEventをサポートしている場合、関数として評価されます。これは真の値です。

関連する問題