[英]Why doesn't the newly set property persist on jQuery object but it persists on the dom element?
elem
是 id 為 dummy 的 dom 元素。 jElem
是 jquery object 包裹在elem
上。
obj1
具有init
方法,該方法在傳遞給它的參數上設置屬性。 在這里,它創建了一個新的屬性prop
並將其設置為true
。 obj2
在其init
方法中也傳遞了相同的參數。 obj2
還具有showProp
方法,該方法打印在傳遞的參數上設置的屬性。 以下是代碼:
let elem = document.querySelector("#dummy"); let obj1 = { init(item){ item.prop = true; } }; let obj2 = { init(item){ this.item = item; }, showProp(){ console.log(this.item.prop); } }; obj1.init($(elem)); obj2.init($(elem)); obj2.showProp(); //undefined obj1.init(elem); obj2.init(elem); obj2.showProp(); //true
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="dummy">dummy</div>
我擔心的是:當jElem
在兩個對象中都傳遞時, jElem 上的屬性不會持久化。 但是當 dom 元素本身傳遞時( elem
),該屬性仍然存在。 這是為什么?
我很抱歉造成誤解。 我真的很傻。 我沒有睡覺,也無法正確調試。 問題是我正在編寫如下代碼:
let elem = document.querySelector("#dummy");
let obj1 = {
init(item){
item.prop = true;
}
};
let obj2 = {
init(item){
this.item = item;
},
showProp(){
console.log(this.item.prop);
}
};
obj1.init($(elem));
obj2.init($(elem));
obj2.showProp(); //undefined
obj1.init(elem);
obj2.init(elem);
obj2.showProp(); //true
這顯然符合預期,因為我在傳遞給 function 時創建了一個新的 jQuery object: obj1.init($(elem))
和obj2.init($(elem));
. 在這里,顯然兩個init
方法都傳遞了 2 個不同的對象,而不是同一個 object。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.