javascript
JS中的call()方法和apply()方法和slice()用法总结
1. 每個函數(shù)都包含兩個非繼承而來的方法:call()方法和apply()方法。
2. 相同點:這兩個方法的作用是一樣的。
都是在特定的作用域中調(diào)用函數(shù),等于設(shè)置函數(shù)體內(nèi)this對象的值,以擴充函數(shù)賴以運行的作用域。
一般來說,this總是指向調(diào)用某個方法的對象,但是使用call()和apply()方法時,就會改變this的指向。
call()方法使用示例:? ? //例1
??
apply()方法使用示例:? ? //例1
? ? //例2
? ? function Pet(words){this.words = words;this.speak = function () {console.log( this.words)}}function Dog(words){//Pet.call(this, words); //結(jié)果: WangPet.apply(this, arguments); //結(jié)果: Wang}var dog = new Dog('Wang');dog.speak();
3. 不同點:接收參數(shù)的方式不同。
apply()方法 接收兩個參數(shù),一個是函數(shù)運行的作用域(this),另一個是參數(shù)數(shù)組。
語法:apply([thisObj [,argArray] ]);,調(diào)用一個對象的一個方法,2另一個對象替換當(dāng)前對象。
說明:如果argArray不是一個有效數(shù)組或不是arguments對象,那么將導(dǎo)致一個?
TypeError,如果沒有提供argArray和thisObj任何一個參數(shù),那么Global對象將用作thisObj。
call()方法 第一個參數(shù)和apply()方法的一樣,但是傳遞給函數(shù)的參數(shù)必須列舉出來。
語法:call([thisObject[,arg1 [,arg2 [,...,argn]]]]);,應(yīng)用某一對象的一個方法,用另一個對象替換當(dāng)前對象。
說明: call方法可以用來代替另一個對象調(diào)用一個方法,call方法可以將一個函數(shù)的對象上下文從初始的上下文改變?yōu)閠hisObj指定的新對象,如果沒有提供thisObj參數(shù),那么Global對象被用于thisObj。
使用示例1:
? ? function add(c,d){return this.a + this.b + c + d;}var s = {a:1, b:2};console.log(add.call(s,3,4)); // 1+2+3+4 = 10console.log(add.apply(s,[5,6])); // 1+2+5+6 = 14?
使用示例2:? ?
數(shù)組
在JavaScript中數(shù)組可以存儲不同類型的數(shù)據(jù),如下圖所示,讓我們來聲明一個存有不同類型數(shù)據(jù)的數(shù)組。
該數(shù)組中存儲了:數(shù)字,字符串以及布爾
?
Slice()
slice的中文翻譯是切片,顧名思義,從原數(shù)組中切出子數(shù)組,并將其賦值給新變量,同時不會改變原數(shù)組
from:從該索引值開始切片until:切片到該索引值(不包含該索引值)
如果我們想獲取包含原數(shù)組的前三個元素的子數(shù)組,應(yīng)該怎么做呢?讓我們在Chrome開發(fā)者工具中實例運行下
?
?
newArray變量現(xiàn)在是一個新數(shù)組,且array的值未發(fā)生改變
?
?
?
總結(jié)
復(fù)制數(shù)組中的元素將它們作為新數(shù)組返回不會更改原始數(shù)組從from開始切片直到until索引:array.slice(from,until)切片不包括“until”索引值的元素可以用于數(shù)組和字符串
總結(jié)
以上是生活随笔為你收集整理的JS中的call()方法和apply()方法和slice()用法总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 狗子被车压的第三天为什么粘人狗子被车压的
- 下一篇: 二手车租赁中介费怎么收取的?