你好,这里有一个关于 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
是对包含该<tag></tag>
元素的 jQuery 对象的引用,是的。
如果要保留对第二个元素的引用,可以.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 的垃圾收集通常意味着您已完成的对象不会在内存中徘徊。
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);
如果您需要对象的副本,可以使用$.clone() 。
var obj2 = obj1.clone().append("something");