title: 仿寫(xiě)數(shù)組對(duì)象
date: 2017-11-13 20:26:25
tags:
數(shù)組對(duì)象 <font style="color: #8D0000;">push | pop | shift | unshift | reverse | splice | join | slice</font>
prototype給某個(gè)類(lèi)添加屬性或方法
var a=[1,2,3];
var b=[4,5,6];
<font style="color: #8000D0;">給數(shù)組類(lèi)(所有的數(shù)組對(duì)象)添加myPush方法</font>
Array.prototype.myPush=function(){
// 哪個(gè)數(shù)組對(duì)象調(diào)用myPush,this就指向調(diào)用myPush的數(shù)組對(duì)象
// console.log(this);
// 調(diào)用的時(shí)候骇陈,寫(xiě)了多少個(gè)參數(shù)托慨,arguments就有幾個(gè)元素葵孤,arguments是所有參數(shù)組成的數(shù)組担钮,稱(chēng)為參數(shù)列表
// console.log(arguments);
// arguments參數(shù)列表,獲取用戶寫(xiě)入的參數(shù)列表
for(var i=0;i<arguments.length;i++){
this[this.length]=arguments[i];
}
}
a.myPush(44,55,66);
console.log(a);
<font style="color: #8000D0;">給數(shù)組類(lèi)(所有的數(shù)組對(duì)象)添加myPop方法</font>
Array.prototype.myPop=function(num){
// 無(wú)參數(shù)
// var res=this[this.length-1];
// this.length=this.length-1;
// 有參數(shù)
var res=[];
for(var i=this.length-num;i<this.length;i++){
res.myPush(this[i]);
}
this.length=this.length-num;
return res;
}
// a.myPop(2);
console.log(a.myPop(2),a);
<font style="color: #8000D0;">給數(shù)組類(lèi)(所有的數(shù)組對(duì)象)添加myReverse方法</font>
Array.prototype.myReverse=function(){
for(var i=0;i<parseInt(this.length/2);i++){
// this[i]和this[this.length-1-i]交換即可
var temp=this[i];
this[i]=this[this.length-1-i];
this[this.length-1-i]=temp;
}
}
console.log(a);
a.myReverse();
console.log(a);
<font style="color: #8000D0;">給數(shù)組類(lèi)(所有的數(shù)組對(duì)象)添加myUnshift方法</font>
Array.prototype.myUnshift=function(){
this.myReverse();
for(var i=arguments.length-1;i>=0;i--){
this.myPush(arguments[i]);
}
this.myReverse();
}
console.log(a);
a.myUnshift(100,200);
console.log(a);
<font style="color: #8000D0;">給數(shù)組類(lèi)(所有的數(shù)組對(duì)象)添加myShift方法</font>
Array.prototype.myShift=function(){
this.myReverse();
var res=this.myPop(2);
this.myReverse();
return res;
}
// a.myShift();
console.log(a.myShift(),a);
<font style="color: #8000D0;">給數(shù)組類(lèi)(所有的數(shù)組對(duì)象)添加myJoin方法</font>
Array.prototype.myJoin=function(str){
if(str===undefined){
str=",";
}
var all='';
for(var i=0;i<this.length-1;i++){
all += this[i]+str;
}
all+=this[this.length-1];
return all;
// // 方法二
// all+=this[0];
// for(var i=1;i<this.length-1;i++){
// all += this[i]+str;
// }
// return all;
// // 方法三
// var all='';
// for(var i=0;i<this.length-1;i++){
// if(i==this.length-1){
// str="";
// }
// all += this[i]+str;
// }
// return all;
}
console.log(a.myJoin(""));
console.log(Boolean("")===Boolean(undefined));
<font style="color: #8000D0;">給數(shù)組類(lèi)(所有的數(shù)組對(duì)象)添加mySplice方法</font>
Array.prototype.mySplice=function(index,length){
var res=[];
var newArr=[];
// 把index-length范圍的數(shù)做成數(shù)組,作為mySplice的返回值
for(var i=index;i<index+length;i++){
res.myPush(this[i]);
}
// 拼成新的數(shù)組分為三部分
// 1尤仍、范圍之前箫津,index之前
for(var i=0;i<index;i++){
newArr.myPush(this[i]);
}
// 2、參數(shù)列表里面下標(biāo)2(包括下標(biāo)2)之后的參數(shù)
for(var i=2;i<arguments.length;i++){
newArr.myPush(arguments[i]);
}
// 3宰啦、范圍之后苏遥,index+length開(kāi)始,到最后一個(gè)
for(var i=index+length;i<this.length;i++){
newArr.myPush(this[i]);
}
// newArr 新數(shù)組
this.length=0;
for(var i=0;i<newArr.length;i++){
this.myPush(newArr[i]);
}
return res;
}
console.log(a);
console.log(a.mySplice(2,1,33,44,55,66));
console.log(a);
<font style="color: #8000D0;">給數(shù)組類(lèi)(所有的數(shù)組對(duì)象)添加mySlice方法</font>
Array.prototype.mySlice=function(start,end){
var res=[];
for(var i=start;i<end;i++){
res.myPush(this[i]);
}
return res;
}
console.log(a);
console.log(a.mySlice(2,4));