利用apply提高程式設計效率的方法總結

2021-09-24 06:58:12 字數 3299 閱讀 6903

下面是乙個常見的例子:

var dog = 

}var cat =

例子中分別定義了乙個dog物件和乙個cat物件,它們都有sound變數,但是dog物件有乙個makesound方法,而cat沒有,如果這裡要求cat也要能夠發聲(makesound),有兩種直觀的解決方案:

第一,給cat直接賦予乙個makesound方法

var cat = 

}複製**

第二,利用原型繼承

var pets = function(sound) 

pets.prototype.makesound = function

() var dog = new pets('wang');

var cat = new pets('miao');

cat.makesound(); // miao複製**

可以傳入this,改變函式執行時的執行環境。

1. 類陣列借用陣列方法

// 錯誤例子

var addone = function

() );

}var arr = addone(1,2,3,4) // uncaught typeerror: arguments.map is not a function

// 正確的例子

var addone = function

());

}addone(1,2,3,4); // [2,3,4,5]

// 這裡使用call更加簡單

var addone = function

() )

}複製**

上面的addone函式將所有傳入的引數分別加1,然後組成陣列返回,函式的arguments就是由引數構成的乙個類陣列,我們無需取出這些引數再乙個個加1,再push進陣列,而是將類陣列先轉化為陣列,然後使用陣列的map方法。第乙個錯誤的示例表明了類陣列不具有陣列方法,所以報錯。

在dom操作中,如document.getelementsbyclassname,document.queryselectall等方法拿到的物件都是類陣列,一般來講,只要轉化成陣列型別就會極大地方便我們的操作。

2. 求陣列的最大最小值

3. 準確判斷物件型別

判斷物件型別,我們有typeof函式可用,但是它的判斷並不可靠,比如,對陣列進行typeof操作,返回的卻是"object"。而在object的原型物件上,有乙個tostring方法,它作用在不同型別的物件上,返回特定的字串,根據返回值可以準確地判斷物件型別。

(){}) // "[object, function]"

複製**

該判斷方法可以支援如下型別的判斷:nodelist,window,object,string,infinity,number(nan),function,htmldocument,undefined,boolean。需要特別注意的是number型別的判斷,naninfinity也會被識別為number型別(可用如下規則判斷:1/0 === infinity,1/-0 === -infinity,nan != nan)。這裡因為不涉及第二個引數的問題,所以使用call也完全是可以的。

4. 二維陣列的扁平化

先來看看陣列的concat方法的用法:

var a = [1,2,3];

var b = [4,5,6];

var c = a.concat(7,8,9) // [1,2,3,7,8,9]

var d = a.concat(b) // [1, 2, 3, 4, 5, 6]

var f = a.concat(7,8,b,9) //[1, 2, 3, 7, 8, 4, 5, 6, 9]

a // [1,2,3]

b // [4,5,6]複製**

var twodemarr = [[1,2,3], [4,5,6], 7,8,9]

arr // [1,2,3,4,5,6,7,8,9]複製**

push也接受雜湊引數,它將引數推入陣列,並且改變了原陣列,那麼它就可以實現,將乙個陣列的元素推入另外乙個陣列,並且改變被推入陣列:

var a = [1,2,3]

var b = [4,5,6]

a // [1,2,3,4,5,6]複製**

unshiftpush一樣,不過是將元素加在陣列前面:

var a = [1,2,3]

var b = [4,5,6]

a // [4,5,6,1,2,3]複製**

5. 修正內部函式的this指向

在函式內部定義的函式,如果直接呼叫,則該內部函式的this並不指向外層函式的this,而是指向全域性執行環境,所以呼叫內部函式必須指明其this的指向

// 問題**示例

document.getelementbyid('div1').onclick = function

() func(); // undefined

}// 正確**示例

document.getelementbyid('div1').onclick = function

() }複製**

6. 給既有方法打補丁

看下面一段**:

// 儲存原函式

var originalfoo = someobject.foo;

someobject.foo = function

() 複製**

上面的例子,在呼叫原來的方法之前或者之後,執行了新的操作,補充增強了原來的方法,而且不改變原來的操作。這也是設計模式中裝飾者模式的實現思路

提高PHP程式設計效率

1,用單引號代替雙引號來包含字串,這樣做會更快一些。因為php會在雙引號包圍的字串中搜尋變數,單引號則 不會 2,如果能將類的方法定義成static,就盡量定義成static,它的速度會提公升將近4倍 延伸 靜態呼叫靜態 self xx 或者 類名 xx 靜態呼叫動態self 動態 3,row id...

提高PHP程式設計效率的技巧

用單引號代替雙引號來包含字串,因為php會在雙引號包含的字串中搜尋變數。row id 的速度比 row id 要快。echo比print要快,並且在使用echo多重引數時用 連線。foreach效率更高,盡量代替for及while。在執行for迴圈之前確定最大迴圈數,不要每次計算最大值。登出那些不用...

提高程式設計效率的幾點建議

最近看了本關於提高程式設計效率的書,裡面提到了很多很好的建議,我大致整理了下部分常用的建議,在這裡分享給大家。建議的分析 就不在這裡寫了,實在太多。基礎篇 1 儘量減少物件的裝箱操作,如 string s object o s 2 盡量使用系統自帶的預設轉型方法,如 tostring 3 型別轉換用...