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;