JS面向?qū)ο?/h2>

JS面向?qū)ο笕腴T

1、面向?qū)ο笳Z言概念
面向?qū)ο笳Z言主要包括 類、對象、封裝、多肽。
2、面向?qū)ο蟮木幊趟枷?br> 面向過程思想:關(guān)注解決問題的步驟 按步驟執(zhí)行
優(yōu)點:開發(fā)成本低。
缺點:不適合大型項目。
面向?qū)ο笏枷耄宏P(guān)注解決問題所需要的對象,然后根據(jù)業(yè)務邏輯按一定的規(guī)則調(diào)用這些對象的相關(guān)功能
(想看對象有哪些功能進行封裝——在按邏輯思路走)
優(yōu)點有效的彌補面向過程思想的不足。

3、js里的面向?qū)ο?br> 1> 對象分為系統(tǒng)對象和自定義對象兩種。我們可以通過調(diào)用系統(tǒng)構(gòu)造函數(shù)來創(chuàng)建出系統(tǒng)對象,
如:array\date等。自定義對象必須自己創(chuàng)造,無法利用系統(tǒng)函數(shù)來創(chuàng)造。

        // new + 構(gòu)造函數(shù)
        var arr1 = new Array();

        // 字面量
        var arr2 = [1, 2, 3];
        var obj1 = new Object();

2>創(chuàng)建JS對象_直接創(chuàng)建

        // 1、創(chuàng)建一個空對象
        var per1 = new Object();
        // 2、把該對象所需要的屬性、方法添加進去
        per1.name = "曹勇";
        console.log(per1.name);
        per1.gender = "男";
        // 給新對象添加方法(函數(shù) )
        per1.manager = function () {
            alert("保持安靜");
        };
        per1.name = "西門大官人";
        per1.age = 12;
        console.log(per1.age);

       刪除對象中的屬性:delete+對象屬性名
        delete per1.age;
        console.log(per1.age);

對象名.方法名():調(diào)用對象下的方法。
per1.manager(); :

如何區(qū)分:函數(shù)\方法?當函數(shù)屬于一個對象時,該函數(shù)就是這個對象下的一個方法,通過方法名來調(diào)用該函數(shù)

如何區(qū)分:變量\屬性?當變量屬于某一個對象時,該變量就是這個對象下的一個方法,通過屬性名來調(diào)用該變量

        // 把per1對象交給per2,這樣per2就和per1一致
        
        var per2 = per1;
        console.log(per2.name);
        console.log(per2.age);
        per2.name = "張倩";
        console.log("修改后的p2name屬性"+per2.name);
        // 因為per2和per1所指向的是同一塊內(nèi)存,所以per2修改了這塊內(nèi)存的值,per1再來訪問時,就會獲取到新的值
        console.log("per1的name屬性值" + per1.name);


        // 創(chuàng)建第二個per對象
        var per3= new Object();
        per3.name = "老宋";
        per3.age = 24;
        per3.gender = "男";
        per3.hobby = "女";

        // 我們可以通過.(點語法)來訪問對象屬性
        per3.name;

        // 我們也可以通過[]來訪問對象的屬性:方括號中必須是屬性字符串或保存屬性字符串的變量
        // 一般在遍歷對象的屬性時才會使用[]這種方法
        console.log(per3["name"]);
        
        // 遍歷對象屬性:for...in...
 
        for (var property(財產(chǎn)) in per3) {
        console.log( property + "=" + per3[property]);
        }


        var arr = [1, 3, 2, 5];
        for (var index in arr) {
            arr[index];
        }

3>創(chuàng)建JS對象_字面量創(chuàng)建

    // 使用字面量創(chuàng)建對象
    var per1 = {
        name: "張三",//name(屬性) 屬性與屬性值之間用分隔符 隔開: 屬性與屬性之間 逗號隔開,
        age: 12,
        hobby: "打球",
        sayHi: function () {
            alert("你好");
              }
    }
    
    console.log(per1.name);
    per1.sayHi();                   

4>創(chuàng)建JS對象_構(gòu)造函數(shù)創(chuàng)建(工廠模式)

使用構(gòu)造函數(shù)創(chuàng)建對象
優(yōu)勢:
創(chuàng)造多個對象時代碼量比較少
劣勢:
1、內(nèi)存空間浪費嚴重;
2、無法通過代碼獲取到創(chuàng)建出來的對象和構(gòu)造函數(shù)之間的關(guān)系。

        // 1、定義構(gòu)造函數(shù)(首字母必須大寫)
        function CreatPerson (name, age) {
            // 1.1、 創(chuàng)建一個新的空對象
            
            var person = new Object();
            // 1.2、給空對象添加屬性和方法
            person.name = name;
            person.age = age;
            person.sayHi = function () {
                return name + age;
            };
            
            // 1.3、把創(chuàng)建好的對象返回出去
            return person;
            
            }
        // 2、調(diào)用構(gòu)造函數(shù)創(chuàng)建對象
        var per1 =  CreatPerson("張三", 23);
        console.log(per1.name);
            per1.sayHi();
        
        
        var per2 = CreatPerson("李四", 56);
        
        // 通過instanceof可以判斷出該對象是否是通過某個函數(shù)創(chuàng)建出來的。
        // 返回值為false,說明系統(tǒng)無法判斷通過這種方法創(chuàng)造出來的對象和構(gòu)造函數(shù)之間的關(guān)系
        console.log(per2 instanceof CreatPerson);
        console.log(per2.name);
        
        // 使用new+構(gòu)造函數(shù)方法創(chuàng)建出來的對象可以確定對象是否是通過某個函數(shù)創(chuàng)建出來的
        var arr = new Array();
        // 返回true
        console.log(arr instanceof Array);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容