JS 方法名.call()方法说明

922 阅读1分钟

首先我们要知道,JS中函数调用共有四种方法。call() 就是其中一种。我先简单的的说明以下四种方法:

我们先定义一个函数:

function test(){
    /**do something**/
}

1.第一种,也就是最常见的调用方法:

test();

2.第二种:对象调用

我们需要把定义的函数放到一个对象里面(obj)

    var obj={ 
        test:function (){
               /**do something**/ 
            }
        }

调用:

obj.test();

3.第三种:构造函数调用

var tmp = new test();

4.第四种:使用call()或者applay()

这种方法调用的时候必须传递一个参数,只要不空着即可。

test.call(null)

其实,以上调用方式,隐含的传递了一个变量:this。

call 和 apply 都是可以改变this 指向的问题, call 方法中传递参数要求一个一个传递参数。 但是apply 方法要求传递参数是一个数组形式。

call方法定义:调用一个对象的一个方法,以另一个对象替换当前对象。实现(多重)继承。

语法:

call(thisobj,[arr1,arr2])

示例:

let arr = [10,20,30,],
    obj = {};
function fn (x, y, z){
	fn.apply(obj,arr)// x->10 y-> 20 z->30
	fn.call(obj,arr)//x->[10,20,30] y-> undefined z->undefined
	fn.call(obj,...arr)
}
function myfunc1(){
    this.name = 'Lee';
    this.myTxt = function(txt) {
        console.log( 'i am',txt );
    }
}
function myfunc2(){
    myfunc1.call(this);
}
var myfunc3 = new myfunc2();
myfunc3.myTxt('Geing'); // i am Geing
console.log (myfunc3.name);	// Lee

call 的线性能要比apply 的性能要好一些, (尤其传递给给函数的参数超过三个时候), call 方法的性能要更高一些, 在做项目要开发的时候可以使用call 要多一些。

bind(): 方法也可以改变this 指向的问题, 但是函数并没有立即执行(只是改变了this 指向问题)