【问题标题】:using the variable passed in constructor in prototype function in javascript with jquery使用带有jquery的javascript原型函数中的构造函数中传递的变量
【发布时间】:2012-10-27 01:28:27
【问题描述】:

我有几个具有相同“专辑”类的 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 的专辑变量,所以我必须将它存储在 this.album 中。但是我不明白为什么 console.log(this.album === album) 是真的,但是 console.log($(this.album) === $(album)) 是假的

我需要在原型中使用jquery,还有其他方法吗?谢谢。

【问题讨论】:

  • 如果this.album === album 返回真,$(this.album).get(0) === $(album).get(0) 也应该返回真。但是每次你在 jQuery 表示法(使用$)中包装一个 DOM 元素时,你都会得到一个新的引用,就像下面解释的 Alex Wayne。

标签: javascript jquery oop constructor prototype


【解决方案1】:
$('body') === $('body') // false

基本上,您这样做是正确的。 jQuery 惹你生气了。

对于对象,=== 运算符仅在它是同一个对象时才为真。在这种情况下,jQuery 每次包装 DOM 元素时都会创建一个全新的对象,即使它包装的是与一秒钟前相同的元素,也会创建一个新对象。

下面是一个例子,说明为什么这是在普通 JS 中,没有 jQuery:

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

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

这里有 2 个对象,它们都具有相同的数据并包装相同的对象。但它们是不同的对象,因此彼此不是===

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 2016-09-05
    • 2021-12-25
    • 1970-01-01
    • 2013-08-04
    相关资源
    最近更新 更多