- call()方法
-
语法:
function.call(thisArg, arg1, arg2, ...)
用于 Function 对象,thisArg:在 function 函数运行时,指定的 this 值,将函数的上下文由初始的改为 thisArg 指定的对象。
arg1,arg2 : 指定的参数列表。
-
作用:
obj1.call(obj2,arg1,arg2,...)
我的理解就是使得 ob1 的 this 指向 obj2,也即是 obj1 可以访问 obj2 中的函数和属性。
-
function test(){
alert(this);
alert(this.name);
alert(this.age)
};
var lisi= {name: "李四", age: 20};
// 更改内部的this指针引用对象为obj
test.call(lisi);
像上面的代码,test.call(lisi)表示的就是将 test 的 this 指向 lisi 中,即在 test 中可以访问 lisi 中的值,这就是改变了 test 的上下文。call()还可以用于类的继承,可以调用父构造函数。可以不指定 call()的第一个参数,但是这样做在严格模式和非严格模式中会有差别,在非严格模式中,不指定 call()的第一个参数,会使得 this 的值会被绑定为全局对象;而在严格模式下 this 的值是 undefined。
使用 call()还可以实现继承:
function class1(){
this.setText = function(txt){
alert(txt)
}
}
function class2() {
class1.call(this)
}
var dd = new class2()
dd.setText("dd")
这样 class2 就继承 class1 了,class1.call(this) 的意思就是将 this 使用 class1 代替,那么在 class2 中也就能使用 class1 中的函数了,甚至可以实现多重继承。
-
apply() 方法:
-
语法:
func.apply(thisArg, [argsArray])
它与 call() 的区别在于,它传入的第二个参数必须是数组,其他的用发和 call() 差不多。
-
var nums = [1 ,2 ,3 ,4] console.log(Math.max.apply(null ,nums))
可以使用 apply() 来进行查找数组中的最大值。
-
var ddd = ['a' ,'b' ] var aaa = ['c' ,'d' ] ddd.push.apply(ddd,aaa)
了解的还比较浅,如有问题,望指出,感激不尽。
-
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于