Day14-This

  • this的指向取决於谁呼叫
  • 物件一定指向本身
  • 其余必须透过call、bind等等强制绑定

我们先把this打印出来,可以发现this指向window

console.log(this)

https://ithelp.ithome.com.tw/upload/images/20210914/20130419Z9EJaxsHd8.png

我们宣告一个全域变数a

var a = 3
console.log(this);

https://ithelp.ithome.com.tw/upload/images/20210914/20130419MWzpv2F6bR.png

可以看到在window底下会有刚刚我们宣告的变数a

那如果是let、const呢 ?

let a = 3
console.log(this);

const a = 3
console.log(this);

let 、const 不同於var会使window底下有全域变数。

我们也可以换个思维,既然知道const、let是block scope,也就代表不会污染window!!!

https://ithelp.ithome.com.tw/upload/images/20210914/20130419Ry7CDppsDh.png

物件

var value = 3

var obj = {
  value : 2,
  log : function() {
    console.log(this)
  }
}
obj.log()

https://ithelp.ithome.com.tw/upload/images/20210914/201304191QFEMQCAXQ.png

我们如果把obj2的log指向obj的log

var value = 3

var obj = {
  value : 2,
  log : function() {
    console.log(this)
  }
}
var obj2 = {
  value: 100,
  log: obj.log //point to obj2
}
obj2.log()

https://ithelp.ithome.com.tw/upload/images/20210914/20130419HWFJSVS8B1.png

没错! 取决於谁呼叫谁

Call

当然也有apply、bind等等,这边我们举call的例子即可,都大同小异。

var name = 'Ian'
function sayHi() {
  console.log(this.name)
}
sayHi() //Ian
sayHi.call({name: 'Dennis'})

Arrow Function

匿名箭头并不会绑定於该物件上。

obj = {
  log: () => console.log(this)
}
obj.log() //window

但我们如果使用闭包的写法呢???

obj = {
  value: '3',
  log: function() {
     setTimeout(() => console.log(this))
  }
}
obj.log() //{value: '3', log: ƒ}

<<:  Day01_老太太的前言~落落长~XD"

>>:  < 关於 React: 开始打地基| 父组件、子组件、兄弟姐妹组件的关系 >

前端工程学习日记第17天

#伪类:before :after做左右画线标题效果 经常可以看到这样的标题设计是在左右有一条横线中...

2021-Day11. To be, or not to be. 让Chatbot也能开口成章吧~经典语录精选~

舒安表示:影片开始前几秒的那张投影片纯属失误(放错张...),第11天就开始精神恍惚了 0.0 ...

IT铁人DAY 4-物件导向基本概念(3)

修饰符(Modifier)   上一篇有讲到封装的特性,也就是把一个类别要运行操作所需用到的资讯都包...

[Day8] IoT Maker之Coding知识科普 - (缩排&条件逻辑判断)

1.前言 在各式各样的程序语言中,都有属於自己的语系,像是Arduino就偏向於C语言,而每种语言都...

Day 5— 自动化回信机(2) 读取试算表内容

昨天我们把试算表的前置作业完成,今天我们来看看将别人填表单後送到试算表中的内容怎麽被读取。 首先先来...