浅谈 JavaScript 中的 call()与 apply()

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 中的函数了,甚至可以实现多重继承。

  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    694 引用 • 1142 回帖 • 612 关注

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...