JS函數調用的四種方法

書上有說4中調用方式:javascript

  • 方法調用模式java

  • 函數調用模式瀏覽器

  • 構造器調用模式app

  • apply調用模式函數

下面咱們來看看一些實例更好理解。this

1:方法調用模式。spa

請注意this此時指向myobject。prototype

/*方法調用模式*/
    var myobject={
            value:0,
            inc:function(){
                    alert(this.value)
                }
        }
    myobject.inc()指針

 

2:函數調用模式orm

請注意this此時指向window

/*函數調用模式*/
    
    var add=function(a,b){
        alert(this)//this被綁頂到window
            return a+b;
        }
    var sum=add(3,4);
    alert(sum)

 

3:構造器調用模式

javascript語言精粹一書建議摒棄這中方式。由於有更好的方式。這裏先不介紹。下次發表博文的時候貼出來。

會在這裏加一個鏈接。

/*構造器調用模式  摒棄*/
    
    var quo=function(string){
            this.status=string;
        }
    quo.prototype.get_status=function(){
            return this.status;
        }
    var qq=new quo("aaa");
    alert(qq.get_status());

 

4:apply調用模式

==咱們能夠來看一個更有用的apply實例。看最下面的代碼。

 

/*apply*/
    //注意使用了上面的sum函數
    //與myobject
    //這中調用方式的優勢在於能夠指向this指向的對象。
    //apply的第一個參數就是this指針要指向的對象
    var arr=[10,20];
    var sum=add.apply(myobject,arr);
    alert(sum);

 

看這個apply真正應用。bind這是一個綁定時間的函數

var bind=function(object,type,fn){            if(object.attachEvent){//IE瀏覽器                    object.attachEvent("on"+type,(function(){                                                           return function(event){                                                               window.event.cancelBubble=true;//中止時間冒泡                                                               object.attachEvent=[fn.apply(object)];//----這裏我要講的是這裏                                                               //在IE裏用attachEvent添加一個時間綁定之後。                                                               //this的指向不是到object對象自己因此。咱們綁定的function裏的this.id是沒法正常工做的。                                                               //可是若是咱們用fn.apply(object)                                                               //這裏能夠看出咱們是把apply的第一個對象也就是this的指向變動給了object因此this.id就變成了                                                               //object.id 能夠正常工做了。                                                                                                                              }                                                           })(object),false);                }else if(object.addEventListener){//其餘瀏覽器                        object.addEventListener(type,function(event){                                                              event.stopPropagation();//中止時間冒泡                                                              fn.apply(this)                                                              });                    }                    }    bind(document.getElementById("aaa"),"click",function(){alert(this.id)}); 

相關文章
相關標籤/搜索