亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

這2個函數主要為了解決什么問題?

這2個函數主要為了解決什么問題?

慕標琳琳 2023-05-02 14:10:36
在一些jQuery插件中經??吹筋愃?callback.call(xxx,xxx) 雖然看到書上有介紹 說call和apply函數可以改變作用域,但還是無法非常透徹的理解改變作用域主要是為了解決什么問題,有沒有替代方案,或者 這2個函數主要為了解決什么問題,應用場景,何時使用最合適,每次讀到這樣的代碼就暈了,一下子從線性閱讀中跳出去了,感覺有點繞
查看完整描述

2 回答

?
Helenr

TA貢獻1780條經驗 獲得超4個贊

call和apply的作用很簡單,就是改變上下文,適用場景太多了,雖然有時候只是為了“美觀”,下面幾個是我常用的。

1.

Object.prototype.toString.call(Obj)

用來判斷 Obj 的類型

  1. arguments 雖然和Array 很像,但是他沒有Array的push之類的方法,怎么辦?

Array.prototype.push.call(arguments)

3.Javascript 沒有私有方法的概念,想用閉包實現

(function () {    var Person = function () {        this.doSomeThing = function () {
            _privateFunction.call(this);
        }
    }    var _privateFunction = function () {

    }    window.Person = Person;

}).call(window);

差不多就是這個意思,callback的時候,當你希望你的callback中的上下文是當前上下文的時候,也可以用call或者apply,有什么好處呢?

這個時候你的callback 里面的this 就是指代當前上下文。例如一個類Person,然后他的方法 say 有一個callback的參數,如果這個callback是通過普通的括號來執行的話,那在這個callback里面執行person的其它方法還需要用person.other 來實現,但是切換上下文之后,就是this.other搞定~代碼對比如下:

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();
});


查看完整回答
反對 回復 2023-05-04
?
弒天下

TA貢獻1818條經驗 獲得超8個贊

也用來使函數調用的多個參數變為數組參數,比如求一個數組內最大數值。

arr = [3,23,4,88,2.5,1,5,7,89];alert(Math.max.apply(Math,arr));


查看完整回答
反對 回復 2023-05-04
  • 2 回答
  • 0 關注
  • 240 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號