前言
通過call()、apply()和bind()方法,我們可輕易地借用其它對象的方法,而無須從這些對象中繼承它。
在JavaScript中借用方法
在JavaScript中,有時可以重用其它對象的函數或方法,而不一定非得是對象本身或原型上定義的。通過 call()、apply() 和 bind() 方法,我們可輕易地借用其它對象的方法,而無須繼承這些對象。這是專業 JavaScript 開發者常用的手段。
原型方法
在 JavaScript 中,除了不可更改的原始數據類型,如 string、number 和 boolean,幾乎所有的數據都是對象。Array 是一種適用于遍歷和轉換有序數列的對象,其原型上有 slice、join、push 和 pop 等好用的方法。
一個常用的例子是,當對象和數組都是列表類型的數據結構時,對象可以從數組“借用”方法。最常借用的方法是 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');
借用方法之所以可行,是因為 call 和 apply 方法允許在不同上下文中調用函數,這也是重用已有功能而不必繼承其它對象的好方法。實際上,數組在原型中定義了很多常用方法,比如 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('');
可以看出,不僅對象可以借用數組的方法,字符串也可以。但是因為泛型方法是在原型上定義的,每次想要借用方法時都必須使用 String.prototype
或 Array.prototype
。這樣寫很
主站蜘蛛池模板:
成年免费在线视频
|
天天色综合6
|
久久成人国产精品入口
|
午夜小视频免费观看
|
亚洲午夜久久久精品一区二区三区
|
永久免费不卡在线观看黄网站
|
天天操天天骑
|
电影av在线
|
在线观看中文字幕av
|
亚洲一区在线免费视频
|
免费在线国产
|
欧美日韩亚洲国产
|
bt 自拍 另类 综合 欧美
|
热99re久久免费视精品频软件
|
一级做a爱片久久毛片a高清
|
国产精选电影免费在线观看
|
欧美在线中文字幕
|
国产精品区一区二区三区
|
日韩视频一区二区在线观看
|
成人福利在线观看
|
欧美一级特黄a
|
黄色一级毛片免费看
|
lutube成人福利在线观看污
|
国产女王女m视频vk
中文日韩
|
国产精品久久久久久久四虎电影
|
九九热免费视频在线观看
|
精品中文字幕视频
|
成人福利在线看
|
九色一区二区
|
国产18成人免费视频
|
性欧美大战久久久久久久免费观看
|
国产精品成人一区二区三区电影毛片
|
日韩精品免费看
|
一区二区三区在线视频观看58
|
中文字幕在线网站
|
欧美一级特黄a
|
亚洲啪
|
免费看毛片的网站
|
一级看片免费视频
|
av免费在线网
|
在线看免电影网站
|