gpt4 book ai didi

javascript - 对象实例的数组长度大于提供的参数

转载 作者:行者123 更新时间:2023-12-02 17:04:22 25 4
gpt4 key购买 nike

这里有三个构造函数 Person、Books、Library。现在,对于 Library 部分,我将两个实例作为参数发送给它,这是我使用 book 构造函数创建的。一切正常,但问题是我只发送了两个参数

var newlib=new Library(storyBook,horrorBook);

问题出在这部分:

function Library(){
this.book=new Array(arguments.length);
console.log('length of book array : '+this.book.length);
console.log('argument length : '+arguments.length);
for(var i=0;i<arguments.length;i++){
this.book.push(arguments[i]);


}

this.getbookslist=function (){

for(var i=0;i<this.book.length;i++){
document.body.innerHTML+=this.book[i].name+'</br>';
}
}
}

var newlib=new Library(storyBook,horrorBook);
console.log('newlib book list length : '+newlib.book.length);

但是控制台告诉我 newlib.book.length 的数组长度为 4。而 this.book 的长度为 2。这个问题的原因可能是什么。

代码

<html>
<body>
<script>

function Person(lastname,firstname){
this.lastname=lastname;
this.firstname=firstname;
this.fullname=this.firstname+' '+this.lastname;
}
var mrX=new Person("X","mr");
var mrY=new Person('Y','mr');
var mrZ=new Person('Z','mr');

function Book(name,price,page){
this.name=name;
this.price=price;
this.page=page;
this.author=new Array(arguments.length-3);
for(var i=0;i<arguments.length-3;i++){
this.author[i]=arguments[i+3];

}

}
var storyBook=new Book('story','200','60',mrX);
var horrorBook=new Book('horror ','100','50',mrY,mrZ);
function Library(){
this.book=new Array(arguments.length);
console.log('length of book array : '+this.book.length);
console.log('argument length : '+arguments.length);
for(var i=0;i<arguments.length;i++){
this.book.push(arguments[i]);


}

this.getbookslist=function (){

for(var i=0;i<this.book.length;i++){
document.body.innerHTML+=this.book[i].name+'</br>';
}
}
}

var newlib=new Library(storyBook,horrorBook);
console.log('newlib book list length : '+newlib.book.length);


</script>
</body>
</html>

最佳答案

这里的问题是您对 new Array(arguments.length) 的调用。这将初始化一个 length2 的空数组。 push 方法根据数组的当前length 值插入值。

考虑这个简单的例子:

var a = new Array(2);
a.push("foo");
console.log(a);

这会记录[undefined, undefined, "foo"](或[undefined x 2, "foo"],具体取决于您的浏览器)。 push 操作在索引 2 处执行插入,因为这是 push 时数组的 length已执行。

相反,通过执行 new Array() 或(甚至更好)仅 [] 来初始化初始长度为 0 的数组。

关于javascript - 对象实例的数组长度大于提供的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25391694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com