这里有三个构造函数Person,Books,Library.Now for Library part我发送两个实例作为参数我用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>
答案 0 :(得分:2)
这里的问题是您致电new Array(arguments.length)
。这会使用length
2
初始化一个空数组。 push
方法根据数组的当前length
值插入值。
考虑这个简单的例子:
var a = new Array(2);
a.push("foo");
console.log(a);
这会记录[undefined, undefined, "foo"]
(或[undefined x 2, "foo"]
,具体取决于您的浏览器)。 push
操作在索引2
执行插入,因为这是执行length
时数组的push
。
而是通过执行0
或(甚至更好)new Array()
来初始化一个初始长度为[]
的数组。