在JQuery中,为什么$(this)== $(this)返回false?

时间:2017-02-18 19:40:42

标签: javascript jquery

我在我的控制台中运行了以下行(一旦加载了jquery脚本),并收到以下结果:

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

而且我不知道采取什么措施来弄清楚发生了什么。我的猜测是,有一些对象持有基于时间的价值正在发生变化,但我不知道它是否有所不同。我会尝试在此期间比较这些值,但我希望有人可能会理解这里发生了什么。

编辑以解决我不知道$(arg)的底层实现的问题。我不知道它返回了一个新的引用对象。因此,我不相信这是"如何确定两个JavaScript对象的相等性的重复?"。

1 个答案:

答案 0 :(得分:7)

使用$()返回jQuery实例。因此,您使用this和另一个this实例创建一个实例,您有两个单独的实例。尽管它们与this共享相同的引用,但实例并不相同,而且正在进行比较。

有一个可视化的例子可能会有所帮助,并且可能会让事情变得更加清晰。 jQuery像一个类一样运行。因此,让我们使用非常简单的示例,例如,$()函数不存在:

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

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

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

这两个都使用完全相同的参数(this)来创建一个新的" jQuery"宾语。但是,再一次,obj1是一个完全不同于obj2的实例。他们在记忆中都有自己独特的地方。