下面是乙個常見的例子:
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
型別的判斷,nan
和infinity
也會被識別為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]複製**
unshift
和push
一樣,不過是將元素加在陣列前面:
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 型別轉換用...