0

同じ「アルバム」クラスを持つdivがいくつかあるので、コンストラクターとプロトタイプを使用してクラスを作成したいと思いました。これが私がしたことです

function Album(album){
    this.album = album;

    console.log(this.album === album)
    console.log($(this.album) === $(album))
}

Album.prototype = {
    init: function(){

    },

    loadImages: function(){

    }
};

$('.album').each(function(){    
    var album = new Album(this);
});

init関数でクラスAlbumに渡したalbum変数にアクセスする必要があるため、this.albumに保存する必要があります。ただし、console.log(this.album === album)が真であるのに、console.log($(this.album)=== $(album))が偽である理由がわかりません。

プロトタイプでjqueryを使用する必要がありますが、他の方法はありますか?ありがとう。

4

1 に答える 1

3
$('body') === $('body') // false

基本的に、あなたはこれを正しく行っています。jQueryはあなたを台無しにしています。

オブジェクトの場合、===演算子は、それが同じオブジェクトである場合にのみ true になります。この場合、jQuery は DOM 要素をラップするたびにまったく新しいオブジェクトを作成し、1 秒前にラップした同じ要素をラップしている場合でも新しいオブジェクトを作成します。

これが jQuery を使用しない単純な JS である理由の例を次に示します。

var domEl = document.getElementById('whatev');
var a = { el: domEl };
var b = { el: domEl };

domEl === domEl // true
a === b         // false

ここには 2 つのオブジェクトがあり、どちらも同じデータを持ち、同じオブジェクトをラップしています。しかし、それらは異なるオブジェクトであるため===、互いに関係ありません。

于 2012-11-07T01:54:02.680 に答える