js模式第三章

for循環

循環對象爲dom時,保存dom對象的長度能夠提升瀏覽器性能(如今仍是的嘛?)瀏覽器

來自構造函數的對象

目前,我所說知道的兩種建立對象的方法,對象字面量和new Object。其中,對象字面量方法更簡單明瞭,另外一個緣由是它只是強調了該對象僅是一個可變哈希映射,而不是從對象中提取屬性和方法。與new Object相比,對象字面量沒有做用域解析,由於它可能創造了一個同樣的局部構造函數,解析器須要從調用Object的位置一直向上查找,直到找到object的全局構造函數。dom

var car = { goes: "far"} // 對象字面量發

//構造函數法
var car = new Object();
car.goes = far;
複製代碼

當一操做符調用構造函數時,函數內部將會發生如下狀況:函數

  • 建立一個空對象而且this變量引用了該對象,同時還繼承了該函數的原型。性能

  • 屬性和方法被加入到this引用的對象中。this

  • 新建立的對象由this所引用,而且最後隱式地返回this(若是沒有顯式地返回其餘對象)。spa

    var Person=function(name){ //使用對象字面量模式建立一個新對象 //var this=Object.create(Person.prototype);prototype

    向對象添加屬性和方法
      this.name=name;
      this.say=function(){
          return "Hello World!"
      }
    
      // return this;
    複製代碼

    }code

自調用構造函數

爲了解決實例化對象時,忘記寫new的缺點,並使得原型屬性可在實例對象中使用,那麼能夠考慮下面的方法,具體來講,能夠在構造函數中檢查this是否爲構造函數的一個實例,若是爲否,構造函數能夠再次調用自身,而且在此次調用中正確地使用new操做符:對象

function Waffle(){
    if(!(this instanceof Waffle)){
        return new Waffle();
    }
    this.tastes= "yummy";
}
Waffle.prototype.wantAnother = true;

var first=new Waffle(),
    second=Waffle();

console.log(first.tastes;) //輸出"yummy"
console.log(second.tastes;)//輸出"yummy"
複製代碼

後續繼續補充!繼承

相關文章
相關標籤/搜索