安全類型檢查
typeof 檢測類型機制并非完全可靠,所以直接使用 Object.prototype.toString.call(val)
作用域安全的構造函數
- 構造函數其實就是一個使用的了
new
操作符調用的函數, 當使用了new
操作符時候,構造函數內部用到的this
都指向了新創建的對象實例。 - 如果不使用
new
操作符直接調用定義的構造函數,那么this
就指向了window
, 這是由于js的晚綁定造成的所謂 綁定(binding),即把對象的接口與對象實例結合在一起的方法。
早綁定(early binding)是指在實例化對象之前定義它的屬性和方法,這樣編譯器或解釋程序就能夠提前轉換機器代碼。在 Java 和 Visual Basic 這樣的語言中,有了早綁定,就可以在開發環境中使用 IntelliSense(即給開發者提供對象中屬性和方法列表的功能)。ECMAScript 不是強類型語言,所以不支持早綁定。
另一方面,晚綁定(late binding)指的是編譯器或解釋程序在運行前,不知道對象的類型。使用晚綁定,無需檢查對象的類型,只需檢查對象是否支持屬性和方法即可。ECMAScript 中的所有變量都采用晚綁定方法。這樣就允許執行大量的對象操作,而無任何懲罰。
function Person (name) {
if(this instanceof Person) { //檢查this對象是Person的一個實例
this.name = name;
} else {
return new Person (name)
}
}