javascript

1.javascript原型

    1.1.函數(shù)的原型對象
      我們創(chuàng)建一個函數(shù),瀏覽器就會為我們在內存中創(chuàng)建一個原型對象,每個函數(shù)默認會
      有一個prototype屬性,這個prototype就指向這個函數(shù)的原型對象,這個原型對象就
      函數(shù)的原型,同時這個原型對象里面會有一個constructor屬性,這個constructor屬性
      指向的就是這個函數(shù)(可以理解為原型對象是類,函數(shù)是構造方法)。
    1.2.原型模型創(chuàng)建對象的缺陷
      原型中的所有屬性都是共享的,同一構造創(chuàng)建的對象,去訪問原型中的屬性,每個
      對象訪問的都是同一個屬性,但每個對象的屬性都是不一樣的,但是對于方法來說
      但是,這個共享特性對 方法(屬性值是函數(shù)的屬性)又是非常合適的。
    1.3.構造函數(shù)模型創(chuàng)建對象的缺陷
     在構造函數(shù)中添加的屬性和方法,每個對象都有自己獨有的一份,大家不會共享。
     這個特性對屬性比較合適,但是對方法又不太合適。因為對所有對象來說,他
     們的方法應該是一份就夠了,沒有必要每人一份,造成內存的浪費和性能的低下。
    1.4.使用組合模式解決上述兩種缺陷
     原型模式適合封裝方法,構造函數(shù)模式適合封裝屬性,綜合兩種模式的優(yōu)點就有了
     組合模式。
    <script type="text/javascript">
    //在構造方法內部封裝屬性
    function Person(name, age) {
        this.name = name;
        this.age = age;
    }
    //在原型對象內封裝方法
    Person.prototype.eat = function (food) {
        alert(this.name + "愛吃" + food);
    }
    Person.prototype.play = function (playName) {
        alert(this.name + "愛玩" + playName);
    }

    var p1 = new Person("李四", 20);
    var p2 = new Person("張三", 30);
    p1.eat("蘋果");
    p2.eat("香蕉");
    p1.play("志玲");
    p2.play("鳳姐");
    </script>
    1.5動態(tài)原型模式創(chuàng)建對象
    前面講到的組合模式,也并非完美無缺,有一點也是感覺不是很完美。把構造方法
    和原型分開寫,總讓人感覺不舒服,應該想辦法把構造方法和原型封裝在一起,所
    以就有了動態(tài)原型模式。動態(tài)原型模式把所有的屬性和方法都封裝在構造方法中,
    而僅僅在需要的時候才去在構造方法中初始化原型,又保持了同時使用構造函數(shù)
    和原型的優(yōu)點。
    <script type="text/javascript">
    //構造方法內部封裝屬性
    function Person(name, age) {
      //每個對象都添加自己的屬性
      this.name = name;
      this.age = age;
      /*
        判斷this.eat這個屬性是不是function,如果不是function則證明是第一次創(chuàng)建對象,
        則把這個funcion添加到原型中。
        如果是function,則代表原型中已經有了這個方法,則不需要再添加。
        perfect!完美解決了性能和代碼的封裝問題。
    */
      if(typeof this.eat !== "function"){
        Person.prototype.eat = function () {
            alert(this.name + " 在吃");
        }
      }
    }
    var p1 = new Person("志玲", 40);
    p1.eat();   
  </script>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容