構造

構造函數數組

- 首字母大寫;
- 裏面用this;
- 經過new來調用;

####繼承
- 在相同屬性和方法的對象集中在一個類中,再把相同的屬性、方法再歸到一個副類中,讓子輩能用。
- 子輩繼承父輩的屬性,還能發展新的屬性
- 在js中繼承就要麻煩一些,js沒有類。只有原型(是動態的)。
- 在js中能經過模擬來繼承。怎麼作假的繼承(效果同樣,但不是從父類繼承下來的)————對象冒充法: 
>第一個假的繼承的方法。
><script>
    //大寫首字母,定義對象
    //建立一個叫people的構造函數
    function People(name,age){//外面傳幾個值進來,分別把這個值給name,age...
        this.name = name;
        this.age = age;
        this.run = function(){  
            alert(this.name+"跑跑跑");
        }
    }
        
    function Man(){//假的繼承,由於man並非people的,能有效果
        this.fifht = "pk";
        //對象冒充法
        this.inherit = People;
        this.inherit(name,age);//執行
        delete this.inherit;//刪除

    }
    var m1 = new Man("小胖",18);
    console.log(m1);
        m1.run();
    console.log(m1 instanceof Man);//檢查對象,m1是否是Man的類型。
    console.log(m1 instanceof People);//檢查對象,m1是否是People的類型。若是man是People的類型,那m1也算是People的類型。
        m1.run();
> </script>

第2、三個假的繼承的方法(call和apply,是專門執行方法的,這2個的區別就是參數,一個是參數用逗號隔開,一個是數組)。
><script>
    //大寫首字母,定義對象
    //建立一個叫people的構造函數
    function People(name,age){//外面傳幾個值進來,分別把這個值給name,age...
        this.name = name;
        this.age = age;
        this.run = function(){  
            alert(this.name+"跑跑跑");
        }
    }
        
    function Man(){//假的繼承,由於man並非people的,能有效果
        //冒充法二
        people.call(this,name,age);//this表明man.
        //冒充法三
        people.apply(this,[name,age]);//this表明man.
    }
    var m1 = new Man("小胖",18);
    console.log(m1);
    console.log(m1 instanceof People);
        m1.run();
> </script>

- 真的繼承方法:原型鏈(prototype),把子類的原型指給父類對象。
><script>
    //大寫首字母,定義對象
    //建立一個叫people的構造函數
    function People(name,age){//外面傳幾個值進來,分別把這個值給name,age...
        this.name = name;
        this.age = age;
        this.run = function(){  
            alert(this.name+"跑跑跑");
        }
    }
        
    function Man(name,age){
        this.fight = "pk";    
        this.constructor(name,age);//爲了子類能使用父類的參數,經過這個來調用父類的構造函數傳參
        constructor來把name和age傳進去。
    }
    Man.prototype = new People();//實現真實繼承的方法
        
    var m1 = new Man("小胖",18);
    console.log(m1);
    console.log(m1 instanceof People);
        m1.run();
    console.log(m1.__proto__.__proto__.__proto__);//經過m1.___(2個下劃線)proto__來查看父級。
> </script>

- 經過constructor(構造)來調用父類的構造函數傳參
> <script>
    function Dongwu(name,age){
        this.name = name;
        this.age = age;
        this.run = function(){
            alert(this.name +"跑跑跑");
        }
    }
    function Dog(name,age,food){
        this.food = food;
        this.constructor(name,age);
    }
    Dog.prototype = new Dongwu();

    function Mao(name,age,fish){
        this.fish = fish;
        this.constructor(name,age);
    }
    Mao.prototype = new Dongwu();

    var m1 = new Dog("狗",18,"骨頭");
    var m2 = new Mao("貓",20,"魚");

    alert(m1.name+" "+" "+m1.age+" "+m1.food);
    alert(m2.name+" "+" "+m2.age+" "+m2.fish);

    m1.run();
    m2.run();

</script>


app

相關文章
相關標籤/搜索