javascript 中this的四种调用模式
function Pet() { this.name = "cat"}var miao = new Pet()miao.name // -\u0026gt; "cat", this=miaofunction showNumber() { console.log(this.n);}var numbers = { n: 100, showN: showNumber}numbers.showN() // -\u0026gt; 100, this=numbersvar n = 55;showNumber() // -\u0026gt; 55, this=windowthis.n // -\u0026gt; 55, this=windowshowNumber.call(numbers) // -\u0026gt; 100, this=numbers
■网友
this有四种绑定方式:
1:默认绑定
2:隐式绑定
3:显示绑定
4:new绑定
第一种默认绑定:
function foo(){
console.log(this.a)
}
var a = 2;
foo(); //2
这里调用的foo函数的是window,所以这里的this指向window, 所以输出是2,这是在非严格模式下调用,如果在严格模式下,会输出undefined
第二种隐式绑定:
function foo(){
console.log(this.a);
}
var obj = {
a:2
}
obj.foo(); //2
这里调用foo的是obj,所以此时的this指向obj, 所以输出是2.
我们再来看看下面这种调用:
function foo(){
console.log(this.a);
}
var obj1 = {
a:2,
foo: foo
}
var obj2 = {
a:4,
obj1 : obj1
}
obj2.obj1.foo(); //2
对象属性调用链只有最后一级或者最顶层会影响调用位置,这里的最顶层是obj1,所以这里this还是指向obj1.
隐式丢失
function foo(){
console.log(this.a);
}
var obj = {
a:2,
foo: foo
}
var a = 4
var baz = obj.foo;
baz(); //4
这里的 var baz = obj.foo; 实际上是把函数的引用赋值给了baz,而baz()调用就是默认绑定方式,这里的this指向window,所以输出了4.
第三种显示绑定方式:
js中有call和apply两个方法,不熟悉的话可以去百度一下,这两个方式就是用来硬性绑定this的,只是参数不同而已。看代码:
function foo(){
console.log(this.a);
}
var obj = {
a:2
}
foo.call(obj); //2
这样,foo里面的this就指向了foo, 所以输出了2.
第四种 new绑定方式
function foo(a){
tthis.a = a;
}
var baz = new foo(2);
console.log(baz.a); //2
我们首先来看看new都做了什么
1.创建了一个新对象。
2.这个新对象会执行原型链接
3.这个新对象会绑定到函数调用的this
4.如果函数没有其他返回值,那么就会把这个新对象返回。
上面的代码中的this被绑定到了一个新对象,然后我们把这个对象赋值给了baz,所以输出了2.
【javascript 中this的四种调用模式】 以上就是4种this绑定方式,他们的优先级如下,new \u0026gt; 显式\u0026gt;隐式\u0026gt;默认,关于优先级在这里我就不详细说了,如果想了解可以看看 你不知道的javascript,书上关于这些内容说得很详尽。
■网友
this是一个指针,何止四种用法,掌握其本质,万变不离其宗。
■网友
这种东西不是看了书就能理解的,学习东西无非两种,做了很久,看过之后豁然开朗。另一种根本不理解,但是印象值提高,不求甚解但是用的不错,然后遇到了第一种,问题解决。个人学习经验,无需太在意。
推荐阅读
- 趣头条|配备四轮转向,续航突破700公里,奔驰EQS将推四种版本
- 纳智捷大7|穷人最好别碰这四种车,不是怕你买不起,而是怕你买了也养不起
- 被子|这四种原因,常常被父母忽略娃睡觉爱踹被子就是热?那可不一定
- 银子|很多家长都会买,实则对宝宝伤害深四种“费银子”的东西
- 在pat中怎样运用javascript等非常用语言做题
- javascript怎样关闭手机网页双指触屏
- 宝宝|其实在暗示父母:我要长牙啦!附出牙顺序表宝宝这四种异常表现
- javascript函数的调用模式有哪几种
- 单手|听说这四种人才会单手开车,看看你是哪一种?
- 为啥C++的this是指针而不是引用
