天天看點

簡單的原型,原型對象和執行個體對象先後順序

  • 之前我們已經學過了原型如何使用,那麼現在我們介紹一種簡單原型的使用方式:即直接通過對象字面量來重寫整個原型對象(這種方法會改變原型對象的構造器)
  • ECMA5中的Object.defineProperty()方法可以為原型對象重新加入構造器。
  • 原型的動态性(注意原型和建立執行個體的前後順序)
//簡單原型
      function Person(){
      }

      Person.prototype = {
        //constructor : Person,
        name : 'z3',
        age : 20,
        job : '前端開發',
        sayName : function(){
          console.log('我是一名' + this.job);
        }
      }

      //ECMA5 給原型對象從新設定構造器方法 Object.defineProperty()
      //接受3個參數,1:重設構造器的對象,2:設定什麼屬性,3:options配置項
      Object.defineProperty(Person.prototype,'constructor',{
        enumerable : false,
        value : Person
      });

      var p1 = new Person();
      console.log(p1.age);
      p1.sayName();
      console.log(p1.constructor);              //function Person(){}
      console.log(Person.prototype.constructor); //function Person(){}

      for(arrt in p1){
        console.log(arrt);
      }
      


      //原型的動态性
      function Person(){

      }

      var p1 = new Person();

      Person.prototype = {
        constructor : Person,   //必須表示原型的構造器
        name : 'z4',
        age : 50,
        height : 170,
        sayName : function(){
          console.log('我身高為:'+this.height);
        }
      }

      console.log(p1.name); //undefined 原型對象裡沒有任何屬性和方法
      //注意簡單原型使用的順序(執行個體對象必須在原型對象後建立)
      
      var p2 = new Person();
      console.log(p2.sayName());
           

繼續閱讀