将对象推入数组
pushing obj to array
我创建了一系列对象,并将它们分组为 1 个项目,
我正在尝试创建这些对象的数组,但我的代码有 2 个小问题。
eventName 并没有像我想的那样递增,而是在我将那部分隔离出来时递增,并且
它识别出正确的信息,但是当我将它推入数组时,它总是在 [0]...只是想知道我做错了什么?
我希望它没问题,如果我只使用我创建的 fiddle,而不是到处复制粘贴。
$(document).ready(function() {
showBreadCrumb();
});
function showBreadCrumb() {
$("a").click(function() {
let idzName = ($(this).attr('id'));
let classzName = ($(this).attr('class'));
let clickRecord = $(this).data('clicked', true);
let count = 0;
let eventName = makeName();
let eventObject = makeEventObject(eventName, idzName, classzName);
let eList = makeEventList(eventObject);
function makeName() {
let vName = "event" + (++count);
let countO = new nameCount(vName, count);
//console.log(countO,vName);
return vName;
}
eventName = makeName();
function nameCount(vName, count) {
this.eName = vName;
this.counter = count;
}
function makeEventObject(eventName, idzName, classzName) {
function eventDetails(eventName, idzName, classzName) {
this.eventName = eventName;
this.idzName = idzName;
this.classzName = classzName;
}
let eventObject = new eventDetails(eventName, idzName, classzName);
// console.log(eventObject);
return eventObject;
}
})
function makeEventList(eventObject) {
let eventList = [];
eventList.push(eventObject);
console.log(eventList);
}
}
我不知道为什么所有这些重叠的内部功能,
但是如果你想将所有点击事件存储在一个数组中,你必须在你的函数之外对你的分配数组进行 decalre 以防止重新初始化它,计数器也是如此。
请参阅下面的工作片段:
(Ps 删除了无用的方法 + decalre 其他点击范围之外的方法(为什么每次点击都在内存中声明函数..)
$(document).ready(function() {
eventList = [];
count = 0;
showBreadCrumb();
});
function showBreadCrumb() {
$("a").click(function() {
let idzName = ($(this).attr('id'));
let classzName = ($(this).attr('class'));
let clickRecord = $(this).data('clicked', true);
let eventName = makeName();
let eventObject = makeEventObject(eventName, idzName, classzName);
let eList = makeEventList(eventObject);
});
}
function makeEventObject(eventName, idzName, classzName) {
function eventDetails(eventName, idzName, classzName) {
this.eventName = eventName;
this.idzName = idzName;
this.classzName = classzName;
}
let eventObject = new eventDetails(eventName, idzName, classzName);
// console.log(eventObject);
return eventObject;
}
function makeName() {
let vName = "event" + (++count);
return vName;
}
function makeEventList(eventObject) {
eventList.push(eventObject);
$(".as-console").html("");
console.log(eventList);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="breadcrumb">Start @ Home</div>
<div class="menubar">
<ul id="navigation_links">
<li><a href="#" id="A" class="L1">Page A</a></li>
<li><a href="#" id="B" class="L1">Page B</a></li>
<li><a href="#" id="C" class="L1">Page C</a></li>
<li><a href="#" id="D" class="L1">Page D</a></li>
<li><a href="#" id="E" class="L1">Page E</a></li>
<li><a href="#" id="F" class="L1">Page F</a></li>
<li><a href="#" id="G" class="L1">Page G</a></li>
<li><a href="#" id="H" class="L1">Page H</a></li>
</ul>
</div>
为什么 array
总是只采用 一个 元素的唯一错误是因为代码 - let eventList = [];
在 [=12] 中的每次点击时被初始化=]方法。
解决方案:将 let eventList = [];
移到顶部。
我创建了一系列对象,并将它们分组为 1 个项目,
我正在尝试创建这些对象的数组,但我的代码有 2 个小问题。
eventName 并没有像我想的那样递增,而是在我将那部分隔离出来时递增,并且
它识别出正确的信息,但是当我将它推入数组时,它总是在 [0]...只是想知道我做错了什么?
我希望它没问题,如果我只使用我创建的 fiddle,而不是到处复制粘贴。
$(document).ready(function() {
showBreadCrumb();
});
function showBreadCrumb() {
$("a").click(function() {
let idzName = ($(this).attr('id'));
let classzName = ($(this).attr('class'));
let clickRecord = $(this).data('clicked', true);
let count = 0;
let eventName = makeName();
let eventObject = makeEventObject(eventName, idzName, classzName);
let eList = makeEventList(eventObject);
function makeName() {
let vName = "event" + (++count);
let countO = new nameCount(vName, count);
//console.log(countO,vName);
return vName;
}
eventName = makeName();
function nameCount(vName, count) {
this.eName = vName;
this.counter = count;
}
function makeEventObject(eventName, idzName, classzName) {
function eventDetails(eventName, idzName, classzName) {
this.eventName = eventName;
this.idzName = idzName;
this.classzName = classzName;
}
let eventObject = new eventDetails(eventName, idzName, classzName);
// console.log(eventObject);
return eventObject;
}
})
function makeEventList(eventObject) {
let eventList = [];
eventList.push(eventObject);
console.log(eventList);
}
}
我不知道为什么所有这些重叠的内部功能, 但是如果你想将所有点击事件存储在一个数组中,你必须在你的函数之外对你的分配数组进行 decalre 以防止重新初始化它,计数器也是如此。
请参阅下面的工作片段: (Ps 删除了无用的方法 + decalre 其他点击范围之外的方法(为什么每次点击都在内存中声明函数..)
$(document).ready(function() {
eventList = [];
count = 0;
showBreadCrumb();
});
function showBreadCrumb() {
$("a").click(function() {
let idzName = ($(this).attr('id'));
let classzName = ($(this).attr('class'));
let clickRecord = $(this).data('clicked', true);
let eventName = makeName();
let eventObject = makeEventObject(eventName, idzName, classzName);
let eList = makeEventList(eventObject);
});
}
function makeEventObject(eventName, idzName, classzName) {
function eventDetails(eventName, idzName, classzName) {
this.eventName = eventName;
this.idzName = idzName;
this.classzName = classzName;
}
let eventObject = new eventDetails(eventName, idzName, classzName);
// console.log(eventObject);
return eventObject;
}
function makeName() {
let vName = "event" + (++count);
return vName;
}
function makeEventList(eventObject) {
eventList.push(eventObject);
$(".as-console").html("");
console.log(eventList);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="breadcrumb">Start @ Home</div>
<div class="menubar">
<ul id="navigation_links">
<li><a href="#" id="A" class="L1">Page A</a></li>
<li><a href="#" id="B" class="L1">Page B</a></li>
<li><a href="#" id="C" class="L1">Page C</a></li>
<li><a href="#" id="D" class="L1">Page D</a></li>
<li><a href="#" id="E" class="L1">Page E</a></li>
<li><a href="#" id="F" class="L1">Page F</a></li>
<li><a href="#" id="G" class="L1">Page G</a></li>
<li><a href="#" id="H" class="L1">Page H</a></li>
</ul>
</div>
为什么 array
总是只采用 一个 元素的唯一错误是因为代码 - let eventList = [];
在 [=12] 中的每次点击时被初始化=]方法。
解决方案:将 let eventList = [];
移到顶部。