도대체 누구를 가리키는지
console.log(this)
class Human {
constructor(name) {
this.name = name //this
}
}
var people = new Human('Bill')
console.log(people.name) //Bill, this people
var student = new Human('Jason')
console.log(student.name) // Jason this student
var o = {
sayName() {
console.log(this.name)
console.log("this ->", this)
}
}
o.name = 'Bill'
o.sayName()
//Bill
// this -> { sayName: [Function: sayName], name: 'Bill' }
function sayName() {
console.log(this) //window
}
sayName은 전역 작용 영역에 있기 때문에 안의this사 전역 환경에서
var o = {
doSomethingLater () {
setTimeout(function() {
this.speak() // Error
}, 1000)
},
speak() {
console.log("Hello Boy")
}
}
o.doSomethingLater() //TypeError: this.speak is not a function
var o = {
doSomethingLater () {
var that = this // this o
setTimeout(function() {
that.speak()
}, 1000)
},
speak() {
console.log("Hello Boy")
}
}
o.doSomethingLater() //Hello Boy
class Increment {
constructor(i) {
this.i = i
}
print() {
setInterval(handlerCallback, 1000) //Uncaught ReferenceError: handlerCallback is not defined // handlerCallback
}
handlerCallback() {
console.log(this.i ++)
}
}
var time = new Increment(0)
time.print()
class Increment {
constructor(i) {
// debugger
this.i = i
}
print() {
setInterval(this.handlerCallback, 1000) // this , handlerCallback handlerCallback this.i
}
handlerCallback() {
console.log(this.i ++) // this i
}
}
var time = new Increment(0)
time.print() //NaN
class Increment {
constructor(i) {
// debugger
this.i = i
}
print() {
setInterval(this.handlerCallback.bind(this), 1000) // handlerCallback this
}
handlerCallback() {
console.log(this.i ++)
}
}
var time = new Increment(0)
time.print() //1,2,3.....
여기까지this의 의미를 이해했습니까, 우리 전편의 작용역과 결합하여 이해 효과가 더욱 좋습니다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.