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

相关文章
相关标签/搜索