JS基礎 -構造函數與原型、原型鏈 Part two

1.構造函數:html

function Foo(name,age){// Foo構造函數名大寫
    this.name =name;
    this.age = age;
    // return this;  //即便不寫,構造函數也默認返回this,最好不寫
}
var f = new Foo("lala",12);//建立實例
 (執行過程:(1)this 變成空對象
           (2)屬性賦值
           (3)return this 賦值給 f
 )

擴展:引用類型都有構造函數數組

var obj = {} //本質是  var obj = new Object() 的語法糖
var arr = [] //       var arr = new Array()
function Foo(){...} //var Foo = new Function(...)
(instanceof判斷引用類型屬於哪一個構造函數,例: f instanceof Foo;判斷邏輯:f的_proto_,一層一層向上找,可否對應到 Foo.prototype)

2.原型規則瀏覽器

如下所說的引用類型均指(對象、數組、函數,不包括null)
(1)全部引用類型,都可自由擴展屬性(具備對象特性)
(2)全部引用類型,均有一個隱式原型屬性(_proto_屬性),屬性值是一個普通對象
(3)只有全部函數,均有一個顯示原型屬性(prototype屬性),屬性值是一個普通對象
(4)全部引用類型,_proto_屬性值 指向它的構造函數的 prototype屬性值
   (obj._proto_ === Object.prototype)
 (5)當想要獲得一個引用類型的某一屬性時,若是其自己不具備該屬性,則會去它的_proto_(即它的構造函數的 prototype)中尋找

知識補充:函數

1.經過對象屬性形式執行函數(例:obj.del()),this 指向對象自己
 2.for(item in obj){ // for in在大多數瀏覽器屏蔽了來自原型的屬性
     if(obj.hasOwnProperty(item)){} //建議加上判斷
   }

3.原型鏈
圖片描述this

相關問題:spa

1.原型鏈繼承的例子-封裝DOM查詢:
  function Elem(id){ //構造函數
      this.elem = document.getElementById(id)
  }
  
  Elem.prototype.html = funcion(val){
      var elem = this.elem;
      if(val){
          elem.innerHtml = val;
          // return this //最好不寫 (鏈式操做)
      }else{
          rerurn elem.innerHtml 
      }  
  }
  
  Elem.prototype.on = funcion(type,fn){
      var elem = this.elem;
      elem.addEventListener(type,fn); //addEventListener能夠屢次綁定同一個事件而且不會覆蓋上一個事件
  }
  
  var div = new Elem("XXX");
  div.html("<p>明天你好<p>").on("click",function(){ //鏈式調用
      alert("Hello World")
  });
  
2.描述new對象的過程:
 (1)建立一個新對象;
 (2)this 指向這個新對象;
 (3)執行代碼(this 賦值);
 (4)返回 this;
相關文章
相關標籤/搜索