1.2.5.2.函數建構子與「.prototype」

  • JavaScript的函數就是物件

  • JavaScript的函數除了CODE property, name property之外, 還會有原型屬性(prototype property)

  • 原型屬性(prototype property)

    • 一旦使用new運算子時, 將函數當成函數運算子時才會用到

    • 任何使用new所建立的物件, 我可以新增屬性到這些物件上, 因為已經有原型物件

    • 並不是在設定或取用函數的原型, 而是物件的原型

      //建立物件
      function Person() {
        this.firstname = 'John';
        this.lastname = 'Doe';
        }
      //建立空物件
      //呼叫person, 並把this指到person上
      var john = new Person();
      //印出Person {firstname: "John", lastname: "Doe"}
      console.log(john)
      Person.prototype.getFullName = function() {
        return this.firstname + ' ' + this.lastname
      }
    • 函數的原型屬性(prototype property), 其實就是用函數建構子建立的物件, 其原型鍊所指向的東西

    • 可以用原型屬性(prototype property)為函數原型增加一個新方法

      • 當要取用這些方法時, 原型練會先看這些物件存不存在

    • 真正好的JavaScript code, 屬性會在建構子中被設定, 因為他們常常是不同的值

      • 但是方法用prototype設定的好處之一是: 不需要新增函數給每個物件, 會佔太多記憶體, 每個物件都會拷貝一份

        //為函數原型增加一個新方法
        //原型中的this會指向物件
        Person.prototype.getFullName = function() {
          return this.firstname + ' ' + this.lastname
        }
        console.log(John.getFullName)

Last updated