javascript - 为什么新设置的属性不会保留在 jQuery 对象上,但会保留在 dom 元素上?
问题描述
elem
是 id 为 dummy 的 dom 元素。jElem
是包裹在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
这显然符合预期,因为我在传递给函数时创建了一个新的 jQuery 对象:obj1.init($(elem))
和obj2.init($(elem));
. 在这里,显然这两种init
方法都传递了 2 个不同的对象而不是同一个对象。
推荐阅读
- sql-server - 简单选择语句遇到除以零错误
- ssl - 即使存在有效证书,私人邮件服务器也会出现证书错误
- javascript - 如何为中心内容开发滚动条
- scheme - 为什么要返回这个?
- javascript - 第一个下拉菜单始终处于打开状态
- reactjs - 从 API Fetch & Map React 显示数据
- python - 如何在涉及matrix_power的matplotlib中绘制矩阵的标量函数?
- javascript - 如何将JS得到的值代入CSS中的特定位置?
- javascript - 无法使用 ASP.NET MVC 和实体框架呈现 CanvasJS 图表
- c - C 冒泡排序整数数组 - 输出问题