欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript中call apply 的應(yīng)用場(chǎng)景

 更新時(shí)間:2015年04月16日 11:23:58   投稿:hebedich  
call, apply都屬于Function.prototype的一個(gè)方法,它是JavaScript引擎內(nèi)在實(shí)現(xiàn)的,因?yàn)閷儆贔unction.prototype,所以每個(gè)Function對(duì)象實(shí)例,也就是每個(gè)方法都有call, apply屬性.

在一些jQuery插件中經(jīng)??吹筋?lèi)似 callback.call(xxx,xxx) 雖然看到書(shū)上有介紹 說(shuō)call和apply函數(shù)可以改變作用域,但還是無(wú)法非常透徹的理解改變作用域主要是為了解決什么問(wèn)題,有沒(méi)有替代方案,或者 這2個(gè)函數(shù)主要為了解決什么問(wèn)題,應(yīng)用場(chǎng)景,何時(shí)使用最合適,每次讀到這樣的代碼就暈了,一下子從線性閱讀中跳出去了,感覺(jué)有點(diǎn)繞

call和apply的作用很簡(jiǎn)單,就是改變上下文,適用場(chǎng)景太多了,雖然有時(shí)候只是為了“美觀”,下面幾個(gè)是我常用的。

1.

復(fù)制代碼 代碼如下:
Object.prototype.toString.call(Obj)

用來(lái)判斷 Obj 的類(lèi)型

arguments 雖然和Array 很像,但是他沒(méi)有Array的push之類(lèi)的方法,怎么辦?
Array.prototype.push.call(arguments)

3.Javascript 沒(méi)有私有方法的概念,想用閉包實(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è)類(lèi)Person,然后他的方法 say 有一個(gè)callback的參數(shù),如果這個(gè)callback是通過(guò)普通的括號(hào)來(lái)執(zhí)行的話,那在這個(gè)callback里面執(zhí)行person的其它方法還需要用person.other 來(lái)實(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();
});

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

相關(guān)文章

最新評(píng)論