前言
通過call()、apply()和bind()方法,我們可輕易地借用其它對(duì)象的方法,而無須從這些對(duì)象中繼承它。
在JavaScript中借用方法
在JavaScript中,有時(shí)可以重用其它對(duì)象的函數(shù)或方法,而不一定非得是對(duì)象本身或原型上定義的。通過 call()、apply() 和 bind() 方法,我們可輕易地借用其它對(duì)象的方法,而無須繼承這些對(duì)象。這是專業(yè) JavaScript 開發(fā)者常用的手段。
原型方法
在 JavaScript 中,除了不可更改的原始數(shù)據(jù)類型,如 string、number 和 boolean,幾乎所有的數(shù)據(jù)都是對(duì)象。Array 是一種適用于遍歷和轉(zhuǎn)換有序數(shù)列的對(duì)象,其原型上有 slice、join、push 和 pop 等好用的方法。
一個(gè)常用的例子是,當(dāng)對(duì)象和數(shù)組都是列表類型的數(shù)據(jù)結(jié)構(gòu)時(shí),對(duì)象可以從數(shù)組“借用”方法。最常借用的方法是 Array.prototype.slice。
function myFunc() { // error, arguments is an array like object, not a real array arguments.sort(); // "borrow" the Array method slice from its prototype, which takes an array like object (key:value) // and returns a real array var args = Array.prototype.slice.call(arguments); // args is now a real Array, so can use the sort() method from Array args.sort(); } myFunc('bananas', 'cherries', 'apples');借用方法之所以可行,是因?yàn)?call 和 apply 方法允許在不同上下文中調(diào)用函數(shù),這也是重用已有功能而不必繼承其它對(duì)象的好方法。實(shí)際上,數(shù)組在原型中定義了很多常用方法,比如 join 和 filter 也是:
// takes a string "abc" and produces "a|b|cArray.prototype.join.call('abc', '|'); // takes a string and removes all non vowelsArray.prototype.filter.call('abcdefghijk', function(val) { return ['a', 'e', 'i', 'o', 'u'].indexOf(val) !== -1;}).join('');可以看出,不僅對(duì)象可以借用數(shù)組的方法,字符串也可以。但是因?yàn)榉盒头椒ㄊ窃谠蜕隙x的,每次想要借用方法時(shí)都必須使用 String.prototype 或 Array.prototype。這樣寫很
主站蜘蛛池模板:
三亚市|
江孜县|
巴彦县|
江安县|
万山特区|
龙岩市|
南岸区|
类乌齐县|
金坛市|
宣城市|
宜州市|
米易县|
宁都县|
鄂尔多斯市|
阳新县|
郑州市|
翼城县|
方正县|
长垣县|
龙江县|
邵阳市|
隆德县|
海宁市|
乌恰县|
乌兰察布市|
涞水县|
额济纳旗|
津南区|
太原市|
赤城县|
东源县|
上思县|
沅陵县|
通许县|
托克逊县|
新郑市|
吴川市|
张家川|
吉安县|
绍兴市|
弋阳县|