es5構造函數

  function Star (uname, age) {
      this.uname = uname;
      this.age = age;
      this.sing = function () {
        console.log('I like sing songs')
      }
    }
實例成員

實例成員就是構造函數內部通過 this添加的成員,uname, age ,sing就是實例成員
實例成員只能通過實例化對象來訪問

    var ldh = new Star('劉德華', 18);
    console.log(ldh.uname);
靜態成員

靜態成員 指的是在構造函數本身上添加的成員
靜態成員只能通過構造函數訪問

    Star.sex = 'man'
    console.log(Star.sex)   // man

    console.log(ldh.sex)    // undefined

構造函數很好用,但是容易造成內存浪費的問題

1.png
 var ldh = new Star();
 var zxy = new Star();
 console.log(ldh.sing === zxy.sing ) ; // false

Star實例對象所分配的內存地址不一樣
我們希望所有的實例對象使用同一個函數這樣比較節省內存地址,需要怎么做呢?

原型對象
   Star.prototype.dance = function () {
     console.log('dance')
   }
   console.log(ldh.dance === zxy.dance);  // true
構造函數通過原型對象分配的函數時所有對象共享的。 javascript 規定,每個構造函數都有一個 prototype屬性,指向另一個對象
注意: prototype就是一個對象,這個對象的所有屬性和方法都會被構造函數所擁有

我們可以把那些不變的方法,直接定義在 prototype 對象上,這樣所有對象的實例就可以共享這些方法

原型是什么: 一個對象 ,prototype原型對象,
作用: 共享方法

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容