第十二天
04-基礎(chǔ)進階-第02天{對象進階、內(nèi)置對象}
對象
工廠模式創(chuàng)建對象
工廠模式:即在函數(shù)中創(chuàng)建對象時,所有屬性使用參數(shù)傳遞進來
-
工廠模式創(chuàng)建出來的對象使用
typeof
打印出來的全是objectfunction Student(name,age,sex,score){ var stu = new Object(); stu.name = name; stu.age = age; stu.sex = sex; stu.score = score; stu.sayHi = function(){ console.log("我叫"+this.name+"今年"+this.age+"歲"); } return stu; } var stu1 = new Student("zs",18,1,100); var stu2 = new Student("ls",20,2,99); var stu3 = new Student("ww",22,1,80); console.log(typeof stu1);// object console.log(typeof stu2);// object console.log(typeof stu3);// object console.log(stu1 instanceof Student); // false console.log(stu2 instanceof Student); // false console.log(stu3 instanceof Student); // false
構(gòu)造函數(shù)模式創(chuàng)建對象
-
原理:使用
this
關(guān)鍵字改變對象歸屬function Student(name,age,sex,score){ this.name = name; this.age = age; this.sex = sex; this.score = score; this.sayHi = function(){ console.log("我叫"+this.name+"今年"+this.age+"歲"); } } var stu1 = new Student("zs",18,1,100); console.log(typeof stu1); // object console.log(stu1 instanceof Student); // true
原型模式創(chuàng)建對象
原型屬性
-
prototype
:是構(gòu)造函數(shù)的原型屬性任斋。將屬性或方法綁定到構(gòu)造函數(shù)的prototype
上后,將來通過構(gòu)造函數(shù)創(chuàng)建的對象都有這個屬性或方法function Student(name,age,sex,score){ this.name = name; this.age = age; this.sex = sex; this.score = score; } Student.prototype.sayHi = function(){ console.log("我叫"+this.name+"今年"+this.age+"歲"); } var stu1 = new Student("zs",18,1,100); var stu2 = new Student("zs",18,1,100); console.log(stu1.sayHi === stu2.sayHi);// true
使用:一般通過原型屬性綁定公共的方法和屬性
__proto__
:是對象的原型屬性敢靡。-
對象的原型屬性
__proto__
指向構(gòu)造函數(shù)的原型屬性prototype
console.log(stu1.__proto__ === Student.prototype); // true
值類型&引用類型
-
值類型:值類型其實就是基本數(shù)據(jù)類型,在內(nèi)存中直接存儲值
string number boolean undefined null
引用類型:引用類型其實就是復雜數(shù)據(jù)類型,在內(nèi)存中存儲引用,主要就是
Object
值類型作參數(shù)
-
值類型作參數(shù)不會改變原始數(shù)據(jù)
function fn(a,b){ a = a+1; b = b+1; console.log(a); // 2 console.log(b); // 3 } var x = 1; var y = 2; fn(x,y); console.log(x); // 1 console.log(y); // 2
引用類型作參數(shù)
-
引用類型作參數(shù)因為拷貝的是棧中的地址,而地址指向堆中的同一個空間,所以會改變堆中的數(shù)據(jù)
function Person(name,age){ this.name = name; this.age = age; } function f2(p){ p.name = "ww"; console.log(p.name);// ww } var p2 = new Person("zs",18); f2(p2); console.log(p2.name); // ww
數(shù)組
復制數(shù)組
// 深層復制
function deepClone(arr){
var newArr = [];
for(var i =0;i<arr.length;i++){
newArr[newArr.length] = arr[i];
}
return newArr;
}
var arr1 = [1,2,3];
var arr2 = deepClone(arr1);
arr2[0] = 100;
console.log(arr1);// [1,2,3] 不影響原始數(shù)組
console.log(arr2);// [100,2,3]
增刪
var arr = [1,2,3];
arr.push(0); // 從后面加入 [1,2,3,0] 返回新數(shù)組的長度
arr.unshift(0);// 從前面添加 [0,1,2,3] 返回新數(shù)組的長度
arr.pop();// 從后面刪除 [1,2] 返回刪除的元素
arr.shift();// 從前面刪除 [2,3] 返回刪除的元素
字符串分隔數(shù)組
// 數(shù)組join方法實現(xiàn)原理
function join(arr,sep){
var str = arr[0];
for(var i=0;i<arr.length;i++){
str = str + sep + arr[i];
}
retrun str;
}
翻轉(zhuǎn)數(shù)組
// 數(shù)組reverse方法實現(xiàn)原理
function reverse(arr){
for(var i=0;i<arr.length/2;i++){
var temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = temp;
}
return arr;
}
數(shù)組過濾filter
-
配合回調(diào)函數(shù)使用
var arr = [1000,2500,1500,2000,3000]; arr.filter(function(element,index,arr){ if(element > 2000){ return false; // 刪除元素 }else{ return true; // 保留元素 } });
數(shù)組索引indexOf
var arr = [1,2,3,1,3,2];
console.log(arr.indexOf(2));// 0 從左往右找某元素第一次出現(xiàn)的位置 返回位置索引
console.log(arr.lastIndexOf(1)); // 3 從左往右找某元素最后一次出現(xiàn)的位置 返回位置索引
獲取數(shù)組中某個元素每次出現(xiàn)的位置
var arr = ["c","a","z","a","x","a"];
var index = -1;
do{
index = arr.indexOf("a",index + 1);
if(index != -1){
console.log(index);// 1 3 5
}
}while(index != -1);
獲取數(shù)組中每個元素出現(xiàn)的次數(shù)
var arr = ["c","a","z","a","x","a"];
var o = {};
for(var i=0;i<arr.length;i++){
var item = arr[i];
if(o[item]){// 能進來說明 對象中有這個值
o[item]++; // 每出現(xiàn)一次 加一次
}else{
// 說明對象中沒有 第一次出現(xiàn)
o[item] = 1;
}
}
截取數(shù)組
var arr = [0,1,2,3,4,5];
arr.slice(1,3);// [1,2,3] 參數(shù) [start,end) 從start開始截取到end 包括start 返回新數(shù)組
arr.splice(0,2);// [0,1] 參數(shù) start 個數(shù) 從原數(shù)組中刪除符合要求的元素 返回這些元素組成的數(shù)組
遍歷數(shù)組forEach
var arr = [1,2,3,4,5];
arr.forEach(function(element,index,array){
console.log(element);// 1 2 3 4 5
});