js中call()和apply()改變指針問題的講解
來源:懂視網(wǎng)
責編:小采
時間:2020-11-27 22:02:03
js中call()和apply()改變指針問題的講解
js中call()和apply()改變指針問題的講解:1. 每個函數(shù)都包含兩個非繼承而來的方法:call()方法和apply()方法。(天生的) 2. 相同點:這兩個方法的作用是一樣的。 都是在特定的作用域中調(diào)用函數(shù),等于設(shè)置函數(shù)體內(nèi)this對象的值,以擴充函數(shù)賴以運行的作用域。 一般來說,this總是指向調(diào)用某個方
導(dǎo)讀js中call()和apply()改變指針問題的講解:1. 每個函數(shù)都包含兩個非繼承而來的方法:call()方法和apply()方法。(天生的) 2. 相同點:這兩個方法的作用是一樣的。 都是在特定的作用域中調(diào)用函數(shù),等于設(shè)置函數(shù)體內(nèi)this對象的值,以擴充函數(shù)賴以運行的作用域。 一般來說,this總是指向調(diào)用某個方
call有兩個妙用:
1: 繼承。
2: 修改函數(shù)運行時的this指針。


區(qū)別:call和apply的區(qū)別在于call的第二個參數(shù)可以是任意類型,而apply的第二個參數(shù)必須是數(shù)組或者arguments
<script>
//一般來說,this總是指向調(diào)用某個方法的對象,但是使用call()和apply()方法時,就會改變this的指向。
/*
call方法:
語法:call(thisObj,arg1,arg2,……,argN)
定義:調(diào)用一個對象的一個方法,以另一個對象替換當前對象
參數(shù)
thisObj;可選項,將被用作當前對象的對象
arg1,arg2,……,argN;可選項,將被傳遞方法參數(shù)序列
說明
call方法可以用來代替另一個對象調(diào)用一個方法。call方法可將一個函數(shù)的對象上下文從初始的上下文改變?yōu)橛衪hisObj指定的新對象。
如果沒有提供thisObj參數(shù),那么Global對象被用作thisObj
*/
/*
apply方法:
語法:apply(thisObj,[arg1,arg2,……,argN])
定義:應(yīng)用某一個對象的一個方法,用另一個對象替換當前對象
*/
//區(qū)別:call和apply的區(qū)別在于call的第二個參數(shù)可以是任意類型,而apply的第二個參數(shù)必須是數(shù)組或者arguments
//1.
function add(a,b) {
console.log(a+b);
}
function sub(a,b) {
console.log(a-b);
}
add.call(sub,3,1);//用add來替換sub,add.call(sub,3,1)==add(3,1),結(jié)果是console.log(4);
//2.
function Animal(){
this.name="Animal";
this.showName=function(){
alert(this.name);
}
}
function Cat(){
this.name="Cat";
}
var animal=new Animal();
var cat=new Cat();
animal.showName.call(cat);
// 通過call或者apply方法,將原本屬于Animal對象的showName()方法交給對象cat來使用。
結(jié)果為alert("Cat");
//3.
function Animal(name){
this.name=name;
this.showName=function(){
alert(this.name);
}
}
function Cat(name){
Animal.call(this,name);
}
var cat=new Cat("Black Cat");
cat.showName();
//Animal.call(this)的意思是使用Animal對象代替this對象,那么Cat中就有了Animal的所有方法和屬性了,Cat對象就能直接調(diào)用Animal的方法和屬性了。
//4.
function Class10(){
this.showSub=function(a,b){
alert(a-b);
}
}
function Class11(){
this.showAdd=function(a,b){
alert(a+b);
}
}
function Class2(){
Class10.call(this);
Class11.call(this);
}
//使用兩個call就實現(xiàn)多繼承了。
</script>
總結(jié)
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
js中call()和apply()改變指針問題的講解
js中call()和apply()改變指針問題的講解:1. 每個函數(shù)都包含兩個非繼承而來的方法:call()方法和apply()方法。(天生的) 2. 相同點:這兩個方法的作用是一樣的。 都是在特定的作用域中調(diào)用函數(shù),等于設(shè)置函數(shù)體內(nèi)this對象的值,以擴充函數(shù)賴以運行的作用域。 一般來說,this總是指向調(diào)用某個方