鸿蒙-JS-第三周day03

THIS的五种情况汇总:

1、在事件绑定中:

给当前元素的某事件行为绑定方法,事件行为触发,此时方法中的this是当前操作元素本身

2、普通方法执行看“点”

2-1、方法执行看前面有没有点,如果有,点前面是谁,this就是谁,如果没有,this就是window,

或者严格模式下的undefined

2-2、自执行的函数一般是window,严格模式下是undefined

2-3、回调函数:一般来说是window,除非在执行回调函数「内部方法」做了特殊处理

3、构造函数执行「new 执行」

构造函数体中的this是当前类的实例

4、箭头函数中(含块级上下文)没有自己的this,所用的this是上级上下文「宿主环境」的this,

箭头函数好用但是不能滥用,不涉及this随便用

5、基于Function.prototype上的call、bind、apply强制改变this指向

1、全局下指的是window

console.log(this);

2、函数调用的情况

函数执行就看函数前有没有点,如果有,点前面是谁,this就是谁,如果没有,this就是window,或者严格模式下的undefined

//'use strict'
function fn(){
  console.log(this)
}
fn();//这里的this就是window,在严格模式下就是undefined

var obj={
  name:"li",
  fn:fn,
}

obj.fn();//这里的this就是obj

自执行的函数一般是window,严格模式下是undefined

//'use strict';
(function () {
      console.log(this)//window
})()

回调函数:一般来说是window,除非在执行回调函数「内部方法」做了特殊处理

<body>
  <div id="box">11111</div>
  <script>
    box.onclick = function () {
      console.log(this)
    }
  </script>
</body>
setTimeout(function (){
   console.log(this);
}, 1000);

THIS练习题

1、

var name="培训";
function fn(){
   console.log(this.name)
}
var obj={
  name:"你好世界",
  fn:fn
}
obj.fn();
fn();

(function(){
  this.fn();
})();

答案:你好世界 培训 培训

2、

var a = 10;
function foo () {
  console.log(this.a)
}
foo();

答案:10

3、

var a = 10;
function foo () {
  console.log('this1', this)
  console.log(window.a)
  console.log(this.a)
}
console.log(window.foo)
console.log('this2', this)
foo();

答案:函数 window window 10 10

4、

let a = 10
const b = 20

function foo () {
  console.log(this.a)
  console.log(this.b)
}
foo();
console.log(window.a)

答案:undefined undefined undefined

5、

var a = 1
function foo () {
  var a = 2
  console.log(this)
  console.log(this.a)
}

foo()

答案:window 1

6、

var obj1 = {
  a: 1
}
var obj2 = {
  a: 2,
  foo1: function () {
    console.log(this.a)
  },
  foo2: function () {
    setTimeout(function () {
      console.log(this)
      console.log(this.a)
    }, 0)
  }
}
var a = 3

obj2.foo1()
obj2.foo2()

答案:2 window 3

7、

let obj={
  name:"li",
  fn:(function(n){
       // 这里的this
       console.log(this);
       return function(){
          // 这里的this
          console.log(this);
       }
  })(10),
}
obj.fn();

答案:window 对象obj

8、

function fn(){
  // 这里的this
  console.log(this);
}
box.onclick=function(){
    console.log(this);
    fn()
}

答案:box元素 window

9、

var num=10;
var obj={num:20};
obj.fn=(function(num){
   this.num=num*3;
   num++;
   return function(n){
       this.num+=n;
       num++;
       console.log(num);
   }
})(obj.num);
var fn=obj.fn;
fn(5);
obj.fn(10);
console.log(num,obj.num)

答案:22 23 65 30

10、

var obj = {
  name: 'obj',
  foo1: () => {
    console.log(this.name)
  },
  foo2: function () {
    console.log(this.name)
    return () => {
      console.log(this.name)
    }
  }
}
var name = 'window'
obj.foo1()
obj.foo2()()

答案:window obj obj

11、

var name = 'window'
var obj1 = {
	name: 'obj1',
	foo: function () {
		console.log(this.name)
	}
}

var obj2 = {
	name: 'obj2',
	foo: () => {
		console.log(this.name)
	}
}

obj1.foo()
obj2.foo()

答案:obj1 window

12、

var name = 'window'
var obj1 = {
  name: 'obj1',
  foo: function () {
    console.log(this.name)
    return function () {
      console.log(this.name)
    }
  }
}
var obj2 = {
  name: 'obj2',
  foo: function () {
    console.log(this.name)
    return () => {
      console.log(this.name)
    }
  }
}
var obj3 = {
  name: 'obj3',
  foo: () => {
    console.log(this.name)
    return function () {
      console.log(this.name)
    }
  }
}
var obj4 = {
  name: 'obj4',
  foo: () => {
    console.log(this.name)
    return () => {
      console.log(this.name)
    }
  }
}

obj1.foo()()
obj2.foo()()
obj3.foo()()
obj4.foo()()

答案:

obj1.foo()() // 'obj1' 'window'
obj2.foo()() // 'obj2' 'obj2'
obj3.foo()() // 'window' 'window'
obj4.foo()() // 'window' 'window'

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值