js進階(二)

第十二天

04-基礎進階-第02天{對象進階、內置對象}

對象

工廠模式創建對象

  • 工廠模式:即在函數中創建對象時,所有屬性使用參數傳遞進來

  • 工廠模式創建出來的對象使用typeof打印出來的全是object

    function 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
    
    

構造函數模式創建對象

  • 原理:使用this關鍵字改變對象歸屬

    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
    
    

原型模式創建對象

原型屬性

  • prototype:是構造函數的原型屬性。將屬性或方法綁定到構造函數的prototype上后,將來通過構造函數創建的對象都有這個屬性或方法

    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__指向構造函數的原型屬性prototype

    console.log(stu1.__proto__ === Student.prototype); // true
    
    

值類型&引用類型

  • 值類型:值類型其實就是基本數據類型,在內存中直接存儲值

    string number boolean undefined null
    
    
  • 引用類型:引用類型其實就是復雜數據類型,在內存中存儲引用,主要就是Object

值類型作參數

  • 值類型作參數不會改變原始數據

    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
    
    

引用類型作參數

  • 引用類型作參數因為拷貝的是棧中的地址,而地址指向堆中的同一個空間,所以會改變堆中的數據

    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
    
    

數組

復制數組

// 深層復制
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] 不影響原始數組
console.log(arr2);// [100,2,3]

增刪

var arr = [1,2,3];
arr.push(0); // 從后面加入 [1,2,3,0] 返回新數組的長度
arr.unshift(0);// 從前面添加 [0,1,2,3] 返回新數組的長度
arr.pop();// 從后面刪除 [1,2] 返回刪除的元素
arr.shift();// 從前面刪除 [2,3] 返回刪除的元素

字符串分隔數組

// 數組join方法實現原理
function join(arr,sep){
    var str = arr[0];
    for(var i=0;i<arr.length;i++){
        str = str + sep + arr[i];
    }
    retrun str;
}

翻轉數組

// 數組reverse方法實現原理
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;
}

數組過濾filter

  • 配合回調函數使用

    var arr = [1000,2500,1500,2000,3000];
    arr.filter(function(element,index,arr){
        if(element > 2000){
            return false; // 刪除元素
        }else{
            return true; // 保留元素
        }
    });
    
    

數組索引indexOf

var arr = [1,2,3,1,3,2];
console.log(arr.indexOf(2));// 0 從左往右找某元素第一次出現的位置 返回位置索引
console.log(arr.lastIndexOf(1)); // 3 從左往右找某元素最后一次出現的位置 返回位置索引

獲取數組中某個元素每次出現的位置

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);

獲取數組中每個元素出現的次數

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]++; // 每出現一次 加一次
    }else{
        // 說明對象中沒有 第一次出現
        o[item] = 1;
    }
}

截取數組

var arr = [0,1,2,3,4,5];
arr.slice(1,3);// [1,2,3] 參數 [start,end) 從start開始截取到end 包括start 返回新數組

arr.splice(0,2);// [0,1] 參數 start 個數 從原數組中刪除符合要求的元素 返回這些元素組成的數組

遍歷數組forEach

var arr = [1,2,3,4,5];
arr.forEach(function(element,index,array){
    console.log(element);// 1 2 3 4 5
});

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,112評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,334評論 2 377

推薦閱讀更多精彩內容

  • JavaScript 定義了幾種數據類型? 哪些是原始類型?哪些是復雜類型?原始類型和復雜類型的區別是什么?六種:...
    Komolei閱讀 255評論 0 0
  • 工廠模式類似于現實生活中的工廠可以產生大量相似的商品,去做同樣的事情,實現同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 7,804評論 2 17
  • 單例模式 適用場景:可能會在場景中使用到對象,但只有一個實例,加載時并不主動創建,需要時才創建 最常見的單例模式,...
    Obeing閱讀 2,088評論 1 10
  • 一、面向過程和面向對象的區別、聯系 1.面向過程編程:注重解決問題的步驟,分析問題需要的每一步,實現函數依次調用。...
    空谷悠閱讀 905評論 1 11
  • 第1章 第一個C程序第2章 C語言基礎第3章 變量和數據類型第4章 順序結構程序設計第5章 條件結構程序設計第6章...
    小獅子365閱讀 10,710評論 3 71