日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript call()函数的应用

發布時間:2023/11/30 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript call()函数的应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

call([thisObj[,arg1[, arg2[, [,.argN]]]]])?

call 方法可以用來代替另一個對象調用一個方法。call 方法可將一個函數的對象上下文從初始的上下文改變為由 thisObj 指定的新對象。?

?

thisObj?可選項。將被用作當前對象的對象。?

arg1, arg2, , argN?可選項。將被傳遞方法參數序列。?

如果沒有提供 thisObj 參數,那么 Global 對象被用作 thisObj。?

-------------------------------------------------------------------------------------------?

obj1.method1.call(obj2,argument1,argument2)?
如上,call 的作用就是把 obj1 的方法放到 obj2 上使用,后面的 argument1.. 這些做為參數傳入.?

舉一個具體的例子?
function add(a,b)?
{?
??? alert(a+b);?
}?
function sub(a,b)?
{?
??? alert(a-b);?
}?

add.call(sub,3,1);?

這個例子中的意思就是用 add 來替換 sub,add.call(sub,3,1) == add(3,1) ,所以運行結果為:alert(4); // 注意:js 中的函數其實是對象,函數名是對 Function 對象的引用。?


看一個稍微復雜一點的例子?

function Class1()?
{?
??? this.name = "class1";?

??? this.showNam = function()?
??? {?
??????? alert(this.name);?
??? }?
}?

function Class2()?
{?
??? this.name = "class2";?
}?

var c1 = new Class1();?
var c2 = new Class2();?

c1.showNam.call(c2);?

注意,call 的意思是把 c1 的方法放到 c2 上執行,原來 c2 是沒有 showNam() 方法,現在是把 c1 的 showNam() 方法放到 c2 上來執行,所以 this.name 應該是 class2,執行的結果就是 :alert("class2");?

怎么樣,覺得有意思了吧,可以讓 a 對象來執行 b 對象的方法,這是 java 程序員所不敢想的。還有更有趣的,可以用 call 來實現繼承?

function Class1()?
{?
??? this.showTxt = function(txt)?
??? {?
??????? alert(txt);?
??? }?
}?

function Class2()?
{?
??? Class1.call(this);?
}?

var c2 = new Class2();?

c2.showTxt("cc");?

這樣 Class2 就繼承 Class1 了,Class1.call(this) 的 意思就是使用 Class1 對象代替 this 對象,那么 Class2 中不就有 Class1 的所有屬性和方法了嗎,c2 對象就能夠直接調用 Class1 的方法以及屬性了,執行結果就是:alert("cc");?

對的,就是這樣,這就是 javaScript 如何來模擬面向對象中的繼承的,還可以實現多重繼承。?

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 就實現多重繼承了?
當然,js 的繼承還有其他方法,例如使用原型鏈,這個不屬于本文的范疇,只是在此說明 call 的用法
說了 call ,當然還有 apply,這兩個方法基本上是一個意思?
區別在于 call 的第二個參數可以是任意類型,而 apply 的第二個參數必須是數組?

?

參考:js call

?

轉載于:https://www.cnblogs.com/xiaochechang/p/5769487.html

總結

以上是生活随笔為你收集整理的JavaScript call()函数的应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。