JavaScript call、apply

call/apply

1.功能:改变this指向
2.不同:传参列表不同

  • call:
    • Person(); == Person.call(); 执行起来是没有区别的。
    • 使用Person.call(替代名),可以将原函数的所有this替换成obj
    • 传参的规则: Person.call(obj,’cheng’,300)中,第一个为替换名,从第二开始为第一个实参。

使用示例:

<script type = "text/javascript"> 
    function Personnameage){
        //this == obj
        this.name = name;  //这里就变成了obj.name = name;
        this.age = age;    //这里就变成了obj.age = age;
    }
    var person = new Person('deng',100);
    var obj = {
    }
    // Person.call(obj,'cheng',300);   //obj传入替换值
    Person.call()Person();
    //test() --->  test.call();     //这样写效果是一摸一样的
</script>

利用call简化代码:
例题:

<script type = "text/javascript"> 
    function Personnameagesex){
        this.name = name;  
        this.age = age; 
        this.sex = sex; 
    }
     function Personnameagesex,tel,grade){
        this.name = name;  
        this.age = age; 
        this.sex = sex; 
        this.tel = tel;
        this.garde = grade;
    }
</script>

简化:

<script type = "text/javascript"> 
    function Personnameagesex){
        this.name = name;  
        this.age = age; 
        this.sex = sex; 
    }
     function Personname,age,sex,tel,grade){
        Person.call( this , name , age , sex) 
        this.tel = tel;
        this.garde = grade;
    }
    var student = new Student('sunny' , 123 , 'male' , 139 , 2017);
</script>
  • apply
    call需要把实参按照形参的个数传进去—传几个形参就是几个 ( call,name,sex,tell )
    apply需要按照数组的形式只传一个实参列表(argumens)—将几个形参变成一个数组传进去 (apply,[name sex , tell])
发布了49 篇原创文章 · 获赞 30 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Reagan_/article/details/81258348