我想为自己的对象设置巫婆,可以在追加时识别相同的对象并将其掉落。

function ImageSet(){
    this.set = [];
}

ImageSet.prototype.length = function(){return this.set.length}
ImageSet.prototype.process = function(imgObj){
    var is_exist = false;
    $.each(this.set, function(i){
        if (this.set[i].imgHash == imgObj.imgHash){is_exist = true};
    });

    if (!is_exist){
        this.set[this.set.length + 1] = imgObj;
        return true;
    }
    return undefined;
}

var imagesChoosen = new ImageSet();

因此,当用户单击元素时,我创建了新对象,然后尝试将其附加到我的ImageSet中。
在第一个单击对象上成功追加到设置,但在第二个单击控制台上写入错误
TypeError: this.set is undefined if (this.set[i].imgHash == imgObj.imgHash){is_exist = true};

调用ImageSet的代码是:
$('#content_table a').click(function(event){
    event.preventDefault();
    el = new Image($(this).attr('href'));
    if (imagesChoosen.process(el)){
        $(this).parent().css("border", "3px dotted orange");
    } else {
        $(this).parent().css("border", "None");
    }
    console.log(imagesChoosen.length());
    return false;
});

我听不懂第一次调用后我的ImageSet是否被破坏?

最佳答案

this.set[this.set.length + 1] = imgObj;

认为应该是:
this.set[this.set.length] = imgObj;

我对JQuery的每个函数不熟悉,但是以前的文章会指出此上下文的更改,因此我将针对每个函数进行更改:
$.each(this.set, function(i){
    if (this.set[i].imgHash == imgObj.imgHash){is_exist = true};
});

至:
for(var i=0;i<this.set.length;i++){
    if (this.set[i].imgHash == imgObj.imgHash){is_exist = true};
};

10-06 00:26