js高程讀書筆記

1,檢測是否是數組的兩種方式

自從 ECMAScript 3 做出規定以後,就出現了確定某個對象是不是數組的經典問題。對於一個網頁,或者一個全局作用域而言,使用 instanceof 操作符就能得到滿意的結果:if (value instanceof Array){ //對數組執行某些操作}instanceof 操作符的問題在於,它假定只有一個全局執行環境。如果網頁中包含多個框架,那實際上就存在兩個以上不同的全局執行環境,從而存在兩個以上不同版本的 Array 構造函數。如果你從一個框架向另一個框架傳入一個數組,那麼傳入的數組與在第二個框架中原生創建的數組分別具有各自不同的構造函數。爲了解決這個問題,ECMAScript 5 新增了 Array.isArray()方法。這個方法的目的是最終確定某個值到底是不是數組,而不管它是在哪個全局執行環境中創建的。這個方法的用法如下。if (Array.isArray(value)){ //對數組執行某些操作}

2,遞歸兩種方法

function factorial(num){
 if (num <=1) {
 return 1;
 } else {
 return num * factorial(num-1)
 }
} 
function factorial(num){
 if (num <=1) {
 return 1;
 } else {
 return num * arguments.callee(num-1)
 }
} 

3,函數的屬性和方法

前面曾經提到過,ECMAScript 中的函數是對象,因此函數也有屬性和方法。每個函數都包含兩個屬性:length 和 prototype。其中,length 屬性表示函數希望接收的命名參數的個數,如下面的例子所示。

function sayName(name){
 alert(name);
}
function sum(num1, num2){
 return num1 + num2;
}
function sayHi(){
 alert("hi");
}
alert(sayName.length); //1
alert(sum.length); //2
alert(sayHi.length); //0 

ECMAScript 5 還定義了一個方法:bind()。這個方法會創建一個函數的實例,其 this 值會被綁定到傳給 bind()函數的值。例如:

window.color = "red";
var o = { color: "blue" };
function sayColor(){
 alert(this.color);
}
var objectSayColor = sayColor.bind(o);
objectSayColor(); //blue 
在這裏,sayColor()調用 bind()並傳入對象 o,創建了 objectSayColor()函數。objectSayColor()函數的this 值等於 o,因此即使是在全局作用域中調用這個函數,也會看到"blue"。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章