2017-02-18 10 views
6

私は(かつてjqueryのスクリプトがロードされている)私のコンソールで次の行を実行し、以下の結果受けています

$(this) 
> [Window] 
$(this) != $(this) 
> true 
$(this) == $(this) 
> false 
$(this) === $(this) 
> false 

をそして、私は何が起こっているかを把握するために取るべき手順がわかりませんに。私の推測では、変化している時間ベースの値を保持するオブジェクトがあるのですが、それが別のものかどうかは疑問です。その間に値を比較しようとしますが、ここで何が起こっているのか誰かが理解できることを期待していました。

$(arg)の基本的な実装を知らなかったという点に対処するために編集されました。私はそれが新しい参照オブジェクトを返したことを知らなかった。したがって、私はこれが "2つのJavaScriptオブジェクトの等価性を判断する方法"と重複しているとは思わない。

+0

http://stackoverflow.com/questions/201183/how-to-determine-equality-for-two-javascript-objects – j08691

+1

_「その間に値を比較しようとします」_何をしようとしていますか決定する? – guest271314

+1

@ guest271314すべてのプロパティの値が等しいかどうか比較する。私はJavaScriptのequalsがequalityだけに基づいて評価され、$(this)が呼び出されるたびに新しい参照を返すことを確認しました。 したがって、バオ、私はこれが重複しているとは思わない。私は、$(これ)が毎回 "this"に新しい参照オブジェクトを返したことを知らなかった。それはあなたのリンクされた質問では扱われていない。 – NicholasFolk

答えて

6

$()を使用すると、jQueryのインスタンスが返されます。したがって、thisで1つのインスタンスを作成し、thisの別のインスタンスで2つのインスタンスを作成します。彼らはthisと同じ参照を共有していますが、インスタンスは同じではなく、比較されています。


これは、視覚的な例を持つのに役立ちますし、少し明確にするかもしれません。 jQueryはクラスのように動作します。それらの両方が新しい「jQueryの」オブジェクトを作成するために、正確に同じ引数(this)を使用している

class jQuery { 
    constructor(element) { 
     this.element = element; 
    } 
} 

var obj1 = new jQuery(this); 
var obj2 = new jQuery(this); 

console.log(obj1 === obj2); // false 

:それでは、例のために、機能$()が存在しない非常に簡単な例を使用してみましょう。しかし、もう一度、obj1はobj2とはまったく異なるインスタンスです。彼らはどちらもメモリ内に独自の場所を持っています。

+3

+1 - さらに、値を比較する場合は、 'this === this 'を使用します。明確にするために、 '$()'でラップすると、[jQueryオブジェクト](https://learn.jquery.com/using-jquery-core/jquery-object/)のインスタンスが返されますあなたの答えでそれを明確にする)。 –

+0

質問の根本を解決しているので、これは本質的に「$(...)が何を返すのか(または何をするのか)」という理由でマークされています。 – NicholasFolk

+1

@NicholasFolk、素晴らしい。私も先に進み、JoshCrozierのコメントのためにどのように動作するのかをより目立つ例を追加しました。 – KevBot

関連する問題