繁体   English   中英

为什么新设置的属性不在 jQuery object 上保留,但在 dom 元素上保留?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM