1. call和apply
? ? call和apply是方法的一種調用方式,定義為:Function.call(obj,arg1,arg2...),Function.call(obj,[arg1,arg2...]);作用是改變調用的函數內部的this指向,使函數內部的this指向obj,通常我們直接調用一個函數時,其內部也是調用的call。示例如下:
2. 對象的枚舉
? ? js中,提供了for...in循環來枚舉對象的屬性,下面的代碼枚舉了對象obj的屬性,以及打印屬性的值:
? ? 上面的代碼中,對象obj的原型屬性也被枚舉了出來,所以for...in循環枚舉的屬性不僅包括自身屬性,還包括原型上的屬性,但系統內置的屬性是不枚舉的。
? ? 我們可以通過對象的hasOwnProperty方法,判斷某個屬性是否為該對象自身屬性,而非繼承屬性,加如下判斷后,sex屬性不會被枚舉出來:
? ? 另一種操作符in,也可以用來判斷某個對象是否有某個屬性,但是它的判斷會包含原型屬性:
3. 對象類型判斷
? ? 我們可以通過typeof運算符來判斷某個原始值是否為某個類型,但對于對象,它的返回值為‘object’,而我們需要判斷該對象是否為某個構造函數的實例,這時可以通過instanceof運算符來判斷:
? ? a instanceof A:判斷a對象是否為A構造函數構造出來,并且如果a對象的原型鏈上有A的原型,那么它的返回結果也是true。
? ? 另一種判斷對象類型的方式是,調用Object.prototype.toString方法,判斷返回結果,如下數組和對象的返回結果是不同的:
? ? 需要注意的是,該方法對js內置對象和客戶端對象的支持比較好,但對自定義對象的返回結果都是"[object Object]"。