JS高級---繼承

繼承

面向對象編程思想: 根據需求, 分析對象, 找到對象有什麼特徵和行爲, 經過代碼的方式來實現需求, 要想實現這個需求,就要建立對象 ,要想建立對象, 就應該顯示有構造函數, 而後經過構造函數來建立對象, 經過對象調用屬性和方法來實現相應的功能及需求, 便可
 

需注意

首先,JS不是一門面向對象的語言, JS是一門基於對象的語言, 那麼爲何學習js還要學習面向對象, 由於面向對象的思想適合於人的想法, 編程起來會更加的方便,及後期的維護....
面向對象的編程語言中有類(class)的概念(也是一種特殊的數據類型), 可是JS不是面向對象的語言, 因此, JS中沒有類(class), 可是JS能夠模擬面向對象的思想編程, JS中會經過構造函數來模擬類的概念(class)
 

面向對象的特性:封裝,繼承,多態

封裝: 就是包裝

一個值存儲在一個變量中--封裝
一坨重複代碼放在一個函數中--封裝
一系列的屬性放在一個對象中--封裝
一些功能相似的函數(方法)放在一個對象中--封裝
好多相相似的對象放在一個js文件中---封裝
 
 

繼承: 

首先繼承是一種關係,類(class)與類之間的關係, JS中沒有類, 可是能夠經過構造函數模擬類, 而後經過原型來實現繼承
繼承也是爲了數據共享,js中的繼承也是爲了實現數據共享
原型做用之一:數據共享,節省內存空間
原型做用之二:爲了實現繼承
 
繼承是一種關係:
父類級別與子類級別的關係
 

多態:

一個對象有不一樣的行爲, 或者是同一個行爲針對不一樣的對象, 產生不一樣的結果, 要想有多態, 就要先有繼承, js中能夠模擬多態, 可是不會去使用, 也不會模擬

 
 

繼承例子:

    //例子:
    //人,都有姓名,性別,年齡, 吃飯, 睡覺, 玩
    //學生,都有姓名,性別,年齡, 成績, 吃飯, 睡覺, 玩 ,學習的行爲


    //js中經過原型來實現繼承

    function Person(name, age, sex) {
      this.name = name;
      this.sex = sex;
      this.age = age;
    }
    Person.prototype.eat = function () {
      console.log("人能夠吃東西");
    };
    Person.prototype.sleep = function () {
      console.log("人在睡覺");
    };
    Person.prototype.play = function () {
      console.log("生活就是不同的玩法而已");
    };


    function Student(score) {
      this.score = score;
    }
    //改變學生的原型的指向便可==========>學生和人已經發生關係
    Student.prototype = new Person("小明", 10, "男");
    Student.prototype.study = function () {
      console.log("學習很累很累的哦.");
    };

    //相同的代碼太多,形成了代碼的冗餘(重複的代碼)

    var stu = new Student(100);
    console.log(stu.name);
    console.log(stu.age);
    console.log(stu.sex);
    stu.eat();
    stu.play();
    stu.sleep();
    console.log("下面的是學生對象中本身有的");
    console.log(stu.score);
    stu.study();

 

改變學生的原型的指向後==========>學生和人已經發生關係,產生原型鏈,則學生裏面有人的屬性和方法以及本身的屬性和方法

相關文章
相關標籤/搜索