Apply和call方法-扩充函数赖以生存的作用域

在某个特殊对象的作用域中,调用方法。

例如:

function Person(name, age, job) {

            this.name = name;

            this.age = age;

            this.job = job;

            this.sayName = function () {

                alert(this.name);

            }

        }

        Person("YU", 29, "BB");

        window.sayName(); //Yu

        var o = new Object();

        Person.call(o, "YU", 29, "BB");

        o.sayName(); //Yu

第一个调用,person的属性和方法都被添加给了windows对象了,因为当在全局作用域中调用一个函数时,this总是指向global对象也就是windows对象。

第二个调用则可以理解为把person函数可以在o的作用域中调用,所以o也就有了所有的属性和方法

这两个方法都是用来改变作用域的,不同之处是传递参数的不同

Apply方法第一个参数是this对象,第二个参数是数组

Call方法第一个参数是this对象,以后的参数是值。

使用哪种方法,可以根据参数的类型决定。

Apply

function callsum1(num1,num2){

               return Sum.apply(this,arguments);

            }

function callsum1(num1,num2){

                return Sum.apply(this,[2,3]);

            }

Call

 

function callsum1(num1,num2){

                return Sum.call(this,num1,num2);

            }
原文地址:https://www.cnblogs.com/y8932809/p/5386803.html