jQuery中的这个关键字

时间:2015-12-30 14:04:01

标签: javascript jquery

通过this进行一些实验,我发现了以下内容:

var foo={foo:'bar',hello:'world'};
$.fn.test=function(){return this;}
$(foo).test()===$(foo); //returns false

我无法解释为什么最后一次比较会返回 false 。我确信调用函数this$(foo).test$(foo) ... 同样的事情发生在$(this).test()===$(this),它也返回 false ;但$(this).test()[0]===window会按预期返回 true

有任何解释吗?

1 个答案:

答案 0 :(得分:3)

执行$(foo)时,您正在执行创建新jQuery对象的函数

如果您再次尝试示例,但将对象存储在变量中,它应该按预期工作:

var $foo = $(foo);
$foo.test()===$foo; //=> true

这是因为JavaScript中的对象之间的比较是由身份完成的,而不是由内容完成。

如果您知道像C这样的语言,您应该理解为什么,如果不是,我会尝试解释:

var x = { a: 1 };
// What happens in memory is that the variable x stores a pointer to a location
//  in memory with the actual content. So in C, if you tried to print x, you
//  would get a long number instead of the actual object, eg: 2435080915
var y = { a: 1 };
// Now we created another object with the same content, but the content is
//  duplicated in memory, it's not at the same place than x, because if it was, 
//  a modification to y would also affect x. So the pointer is
//  another number, eg: 7043815509

// So when we do:
x == y
// what happens is that JavaScript compares the two numbers:
// 2435080915 == 7043815509
// which returns false.