无法在 Javascript 的对象中获取 array/object 的长度
Can't get length of array/object in an Object of Javascript
box = {
curBox: 0,
boxes: document.getElementsByClassName('box'),
size: this.boxes.length, //this one won't work
orSize: Object.keys(this.boxes).length, //as well as this one
preBox: function() {
curBox -= 1
},
nexBox: function() {
curBox += 1
}
}
console.log(box.boxes.length); //This one works well!!!
<div class='active box BG_blue'>
<meta name='title' content='Overview' /> ...
</div>
<div class='inactive box BG_orange'>
<meta name='title' content='Career' /> ...
</div>
<div class='inactive box BG_red'>
<meta name='title' content='Skills' /> ...
</div>
<div class='inactive box BG_awesome'>
<meta name='title' content='Hobbies' /> ...
</div>
我试图从 getElementsByClassName
中获取数组 return 的长度。如果我把它放在对象范围之外,它就会起作用。但在对象范围内,它不会。现在,我想知道一个原因。我已经在其他站点(例如 Mozilla)代码编辑器上进行了测试,但它只有 return 相同的结果。
document.getElementsByClassName('box')
不正确,在这种情况下 return 为空。该函数 returns 元素具有第一个参数中指定的所有 类 作为 space 分隔的字符串。您可以使用 document.querySelectorAll('.box')
.
主要的原因是您仍在初始化您的 Box 对象,因此您无法访问它。换句话说,你的对象在你使用它的时候还没有完全形成。
您可以做的是创建一个函数并return它。
boxes: function() {
return function() { return this.boxes.length; },
}
我创建了一个经过改进的 jsfiddle。 https://jsfiddle.net/jz1thu26/.
另请注意,当 DOM 准备就绪时,您需要 运行 您的方法。
this
in javascript 只有函数作用域,即指向当前执行函数所在的对象。如果你没有这样的对象,即你在顶层,那么this
,在浏览器中,一般指向window
对象。
因此,在构造您的对象时,this
实际上不是您的对象,而是其他东西。
这样的代码可以工作:
const person = {
name: "Wekoslav",
surname: "Stefanovski",
getName: function(){
return this.name + " " + this.surname;
}
}
console.log(person.getName());
因为我只是在定义 getName
函数之后才调用它,并且在该函数中,this
绑定到 person
。但是,这段代码:
const person = {
name: "Wekoslav",
surname: "Stefanovski",
fullName: this.name + " " + this.surname;
}
console.log(person.fullName);
不会工作,因为它绑定到 const person
行执行之前的任何内容。
box = {
curBox: 0,
boxes: document.getElementsByClassName('box'),
size: this.boxes.length, //this one won't work
orSize: Object.keys(this.boxes).length, //as well as this one
preBox: function() {
curBox -= 1
},
nexBox: function() {
curBox += 1
}
}
console.log(box.boxes.length); //This one works well!!!
<div class='active box BG_blue'>
<meta name='title' content='Overview' /> ...
</div>
<div class='inactive box BG_orange'>
<meta name='title' content='Career' /> ...
</div>
<div class='inactive box BG_red'>
<meta name='title' content='Skills' /> ...
</div>
<div class='inactive box BG_awesome'>
<meta name='title' content='Hobbies' /> ...
</div>
我试图从 getElementsByClassName
中获取数组 return 的长度。如果我把它放在对象范围之外,它就会起作用。但在对象范围内,它不会。现在,我想知道一个原因。我已经在其他站点(例如 Mozilla)代码编辑器上进行了测试,但它只有 return 相同的结果。
document.getElementsByClassName('box')
不正确,在这种情况下 return 为空。该函数 returns 元素具有第一个参数中指定的所有 类 作为 space 分隔的字符串。您可以使用 document.querySelectorAll('.box')
.
主要的原因是您仍在初始化您的 Box 对象,因此您无法访问它。换句话说,你的对象在你使用它的时候还没有完全形成。
您可以做的是创建一个函数并return它。
boxes: function() {
return function() { return this.boxes.length; },
}
我创建了一个经过改进的 jsfiddle。 https://jsfiddle.net/jz1thu26/.
另请注意,当 DOM 准备就绪时,您需要 运行 您的方法。
this
in javascript 只有函数作用域,即指向当前执行函数所在的对象。如果你没有这样的对象,即你在顶层,那么this
,在浏览器中,一般指向window
对象。
因此,在构造您的对象时,this
实际上不是您的对象,而是其他东西。
这样的代码可以工作:
const person = {
name: "Wekoslav",
surname: "Stefanovski",
getName: function(){
return this.name + " " + this.surname;
}
}
console.log(person.getName());
因为我只是在定义 getName
函数之后才调用它,并且在该函数中,this
绑定到 person
。但是,这段代码:
const person = {
name: "Wekoslav",
surname: "Stefanovski",
fullName: this.name + " " + this.surname;
}
console.log(person.fullName);
不会工作,因为它绑定到 const person
行执行之前的任何内容。