2 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
call和apply的作用很簡(jiǎn)單,就是改變上下文,適用場(chǎng)景太多了,雖然有時(shí)候只是為了“美觀”,下面幾個(gè)是我常用的。
1.
Object.prototype.toString.call(Obj)
用來判斷 Obj 的類型
arguments 雖然和Array 很像,但是他沒有Array的push之類的方法,怎么辦?
Array.prototype.push.call(arguments)
3.Javascript 沒有私有方法的概念,想用閉包實(shí)現(xiàn)
(function () { var Person = function () { this.doSomeThing = function () { _privateFunction.call(this); } } var _privateFunction = function () { } window.Person = Person; }).call(window);
差不多就是這個(gè)意思,callback的時(shí)候,當(dāng)你希望你的callback中的上下文是當(dāng)前上下文的時(shí)候,也可以用call或者apply,有什么好處呢?
這個(gè)時(shí)候你的callback 里面的this 就是指代當(dāng)前上下文。例如一個(gè)類Person,然后他的方法 say 有一個(gè)callback的參數(shù),如果這個(gè)callback是通過普通的括號(hào)來執(zhí)行的話,那在這個(gè)callback里面執(zhí)行person的其它方法還需要用person.other 來實(shí)現(xiàn),但是切換上下文之后,就是this.other搞定~代碼對(duì)比如下:
var Person = function(){ };Person.prototype.say = function(callback){ callback(); };Person.prototype.other = function(){ };var vincent = new Person(); vincent.say(function(){ vincent.other(); });
用了call的:
var Person = function(){ };Person.prototype.say = function(callback){ callback.call(this); };Person.prototype.other = function(){ };var vincent = new Person(); vincent.say(function(){ this.other(); });

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊
也用來使函數(shù)調(diào)用的多個(gè)參數(shù)變?yōu)閿?shù)組參數(shù),比如求一個(gè)數(shù)組內(nèi)最大數(shù)值。
arr = [3,23,4,88,2.5,1,5,7,89];alert(Math.max.apply(Math,arr));
- 2 回答
- 0 關(guān)注
- 263 瀏覽
添加回答
舉報(bào)