2012-04-26 10 views
3

(JavaScriptで申し訳ありませんが、別のthis質問。)「this」は以下のjavascriptで何を表していますか?

私は以下のコードを持っている、と私は「これは」end--ウィンドウや鳥の呼び出しで何を表すのか思ったんだけど?おそらくwindow

var Bird = (function() { 
    Bird.name = 'Bird'; 

    function Bird(name) { 
     this.name = name; 
    } 

    Bird.prototype.move = function (feet) { 
     return alert(this.name + (" flew" + feet + "ft.")); 
    }; 

    return Bird; 

}).call(this); 
+1

これは、関数xにパラメータxを追加し、呼び出し内にアラート(x)を追加することで、それ以外の場合は空のスクリプトでテストしました。これは**未定義です**。 – delicateLatticeworkFever

+2

@goldilocksそんなことはできません。 'call'を使うと、最初の引数はあなたが実行しているコンテキスト/スコープです。関数にパラメータとして渡されません。あなたが正しく示唆しているものをテストするためには、 '(function(){console.log(this);})call(this);'を試してみてください。引数を見たい場合は、 '(function(arg){console.log(this、arg);})call(this、this);'を試してください。これらの両方のテストは、「これ」が「ウィンドウ」であることを示しています。 – Matt

+0

js私の例のように:http://jsfiddle.net/Umseu/1 – Matt

答えて

7

まあ、親スコープが存在しないと仮定すると、window

EDITです。 .call(this)は鳥の中に書かれていません。単に "Bird" "コンストラクタ"を返す無名関数を呼び出します。

+0

ありがとうございました。ところで、書式にコードを貼り付ける方法についての提案はありますか?私はあなたが私のものを変えたことに気付いた。これはうまいですが、インデントでペーストしたときにすべてがうんざりしてしまい、正しく動作させるためにスペースを使用しなければなりませんでした。 – larryq

+0

@larryqもしあなたがエディタからコピーしているのであれば、インデントのためにスペースの代わりにタブ(\ t)を使うことの問題でしょうか?わからない。 JSを素早くクリーンアップするには、http://jsbeautifier.org/に行きましょう。これは私があなたのためにしたものです – Matt

+0

チップを鑑賞してください。 – larryq

3

ウィンドウ:例を参照してください:

1

匿名機能の最初の行にconsole.log(this)を呼び出します。スコープを返すのは、windowです。

+0

どのような機能の中に?コードには3つの機能があり、その中にはBirdを実際に参照するものがあります。 console.log(this)を呼び出します。上記のコードの後に​​答えを伝えるでしょう。 –

関連する問題