你好,jQuery上有一个新的菜鸟,我想知道jQuery对象是不可变的。 例如:
var obj1 = $("<tag></tag>");
var obj2 = obj1.append("something");
obj1和obj2是否相同意味着obj2会引用obj1?
更新:
上面的例子有点划破我想知道的表面,一个更准确的问题是:如果我从jQuery api链接函数将返回相同的对象或新的(如Java中的字符串的情况)?
你好,jQuery上有一个新的菜鸟,我想知道jQuery对象是不可变的。 例如:
var obj1 = $("<tag></tag>");
var obj2 = obj1.append("something");
obj1和obj2是否相同意味着obj2会引用obj1?
更新:
上面的例子有点划破我想知道的表面,一个更准确的问题是:如果我从jQuery api链接函数将返回相同的对象或新的(如Java中的字符串的情况)?
都 obj1
和 obj2
将是对包含该jQuery对象的jQuery对象的引用 <tag></tag>
元素,是的。
如果你想保留对第二个元素的引用,你可以使用 .appendTo()
代替:
var obj1 = $("<p>foo</p>"),
obj2 = $("<span>bar</span>").appendTo(obj1);
是的,它 obj2
会参考 obj1
。它基本上是做什么的 append
无论给予什么 obj1
并返回引用。
你可以尝试看看 console
那 obj1
和 obj2
有文字 "something"
console.log(obj1);
console.log(obj2);
假设我理解你的问题,是的, obj2
将是对存储的对象的引用 obj1
。如果你做了什么 obj2
:
obj2.attr("id", "example");
您将看到更改 obj1
:
console.log(obj1) //Will show <tag id="example">something</tag>
您可以通过测试两个对象是否相等来进一步确认:
console.log(obj1 == obj2) //true
两个对象都返回相同的元素,所以是的。
如果函数更改选择中的哪些元素,则是,将创建一个新对象。
例如:
var link = $('#myLink'),
span = link.find('span');
link
是一个不同的对象 span
。 然而,原始对象实际上并没有丢失。你可以很容易地回到它 end
方法,基本上回滚操作操作。
$('#myLink')
.find('span') // get the span elements
.css('color', '#fff') // modify them
.end() // go back to the original selection
.css('font-size', '24px'); // modify that
因此,如果您有大量未使用的链式选择调用 end
,你最终可能得到一个非常大的对象(因为会有一系列对象引用它们的对象)。然而,这将是非常尴尬的设计,所以你不太可能这样做,而Javascript的垃圾收集通常应该意味着你已完成的对象不会在内存中闲逛。
您可以使用 $ .clone() 如果你需要副本的对象。
var obj2 = obj1.clone().append("something");
var obj1 = $("<p></p>");
var obj2 = obj1.append("something"); // in this is you just assign the `obj1` object to `obj2`
喜欢:
var x = 5;
var y = x; //here, both x and y are 5
所以, obj1
和 obj2
会引用同样的事情
证明:
console.log(obj1 === obj2);