1. 程式人生 > >對javascript中call()方法的理解

對javascript中call()方法的理解

創建 scrip 補充 call() 函數對象 指定 指針 com fin

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

call()方法:官方介紹是,調用一個對象的一個方法,以另一個對象替換當前對象。

     call()方法應用於Function對象,可以用來代替另一個對象調用一個方法,可將一個函數的對象上下文從初始的上下文改變為thisObj指定的新對象。如果沒有提供thisObj參數,那麽Global對象被用作thisObj.

  直接理解這幾句話還是挺難理解的。先看一個例子:

function Class1(){
        this.name = ‘fine‘;
        this.showName = function
(){ console.log(this.name); console.log(this); }; console.log(this); }
  //實例化構造函數
var class1 = new Class1(); class1.showName();

在Chrome瀏覽器中測試的結果是:

技術分享

可以看到兩個console.log(this)的值是一樣的,均指向構造函數;

然後再把上面的例子修飾一下:

  function Class1(){
        this.name = ‘fine‘;
        
this.showName = function(){ console.log(this.name); console.log(this); }; console.log(this); } function Class2(){ this.name = ‘ok‘; } //創建相應的實例 var class1 = new Class1(); var class2 = new Class2(); class1.showName.call(class2);
//call方法必須應用於函數對象上

在瀏覽器中測試如下:

技術分享

第一個Class1對象是位於Class1構造函數中showName方法之外的console.log(this),在使用call方法後,即

  class1.showName.call(class2);

這個位於showName方法之外的this仍然指向的是Class1.

接下來的 ok 和 Class2對象是位於showName方法內部的,this的指向已經改變,指向了Class2構造函數。可見,call方法改變了它所應用的函數中的this指針的指向。

暫時對call方法的理解就是這樣了,以後有別的理解再補上,也可能有不對的地方歡迎補充~~

參考了Bparadise的博客文章:http://www.cnblogs.com/wuyuetian/p/4999723.html

 

對javascript中call()方法的理解