您好,登錄后才能下訂單哦!
這篇文章給大家介紹怎么在JavaScript中使用call()和apply()改變指針,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
1. 每個函數都包含兩個非繼承而來的方法:call()方法和apply()方法。(天生的)
2. 相同點:這兩個方法的作用是一樣的。
都是在特定的作用域中調用函數,等于設置函數體內this對象的值,以擴充函數賴以運行的作用域。
一般來說,this總是指向調用某個方法的對象,但是使用call()和apply()方法時,就會改變this的指向。
call有兩個妙用:
1: 繼承。
2: 修改函數運行時的this指針。
區別:call和apply的區別在于call的第二個參數可以是任意類型,而apply的第二個參數必須是數組或者arguments
<script> //一般來說,this總是指向調用某個方法的對象,但是使用call()和apply()方法時,就會改變this的指向。 /* call方法: 語法:call(thisObj,arg1,arg2,……,argN) 定義:調用一個對象的一個方法,以另一個對象替換當前對象 參數 thisObj;可選項,將被用作當前對象的對象 arg1,arg2,……,argN;可選項,將被傳遞方法參數序列 說明 call方法可以用來代替另一個對象調用一個方法。call方法可將一個函數的對象上下文從初始的上下文改變為有thisObj指定的新對象。 如果沒有提供thisObj參數,那么Global對象被用作thisObj */ /* apply方法: 語法:apply(thisObj,[arg1,arg2,……,argN]) 定義:應用某一個對象的一個方法,用另一個對象替換當前對象 */ //區別:call和apply的區別在于call的第二個參數可以是任意類型,而apply的第二個參數必須是數組或者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),結果是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來使用。結果為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對象就能直接調用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就實現多繼承了。 </script>
javascript是一種動態類型、弱類型的語言,基于對象和事件驅動并具有相對安全性并廣泛用于客戶端網頁開發的腳本語言,同時也是一種廣泛用于客戶端Web開發的腳本語言。它主要用來給HTML網頁添加動態功能,現在JavaScript也可被用于網絡服務器,如Node.js。
關于怎么在JavaScript中使用call()和apply()改變指針就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。