TIL

23/10/14 TIL __ this 의 바인딩

GABOJOK 2023. 10. 14. 23:44

 

 

 

πŸš—  this 

 

1. κ·Έλƒ₯ μ‚¬μš©ν•œλ‹€λ©΄   

πŸ‘‰  λΈŒλΌμš°μ € μ—μ„œλŠ” window / node.js μ—μ„œλŠ” global μ΄λΌλŠ” μ˜λ―Έλ₯Ό 가지고 μžˆλ‹€.

 

 

2. 일반 ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ 호좜

πŸ‘‰  λΈŒλΌμš°μ € μ—μ„œλŠ” window / node.js μ—μ„œλŠ” global μ΄λΌλŠ” μ˜λ―Έλ₯Ό 가지고 μžˆλ‹€.

 

 

3. script type = 'module' 배경의  일반 ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ 호좜

πŸ‘‰  undefined 을 μ˜λ―Έν•œλ‹€.

 

 

4. object λ‚΄μ˜ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ 호좜

πŸ‘‰  ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό μ‹€ν–‰ ν•œ λ°”λ‘œ μœ„  object λ₯Ό 의미

 

 

5. ν™”μ‚΄ν‘œ ν•¨μˆ˜μ—μ„œμ˜ 호좜

πŸ‘‰ λΈŒλΌμš°μ € μ—μ„œλŠ” window  /  node.js μ—μ„œλŠ”global μ΄λΌλŠ” 의미λ₯Ό 가지고 μžˆλ‹€. 

 

 

6. μƒμ„±μž ν•¨μˆ˜ μ•ˆμ—μ„œμ˜ 호좜

πŸ‘‰ μƒˆλ‘œ μƒμ„±λ˜λŠ” intance(μƒμ„±μž ν•¨μˆ˜λ‘œ λΆ€ν„° μƒμ„±λ˜λŠ” 였브젝트) λ₯Ό  λœ»ν•œλ‹€. 

 

 

7. 이벀트 λ¦¬μŠ€λ„ˆ μ•ˆμ—μ„œμ˜ 호좜

πŸ‘‰ e.currentTarget  λ₯Ό  λœ»ν•œλ‹€.

 

 

 

 

μ˜ˆμ‹œ.  2)  4)

var obj1 = {
  outer: function () {
    //였브젝트 λ‚΄λΆ€μ˜ ν•¨μˆ˜ μ•ˆμ—μ„œ this
    console.log(this);  //{ outer: [Function: outer] }
    
    var innerFunc = function () {
      //일반 ν•¨μˆ˜ μ•ˆμ—μ„œ this
      console.log(this);  //global 객체 호좜(node.jsμ—μ„œ)
    };
    innerFunc(); //λ‘λ²ˆμ§Έλ‘œ μ‹€ν–‰ __ λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œ ν˜ΈμΆœλ˜μ—ˆμ§€λ§Œ μ•žμ— 점이 μ—†μŒμœΌλ‘œ ν•¨μˆ˜λ‘œμ„œμ˜ 호좜

    var obj2 = {
      innerMethod: innerFunc, // 이 λΆ€λΆ„ λ•Œλ¬Έμ— innerFuncκ°€ ν•œλ²ˆλ” μ‹€ν–‰.   
      //{ innerMethod: [Function: innerFunc] }
    };
    obj2.innerMethod(); //μ„Έλ²ˆμ§Έλ‘œ μ‹€ν–‰
  },
};
obj1.outer(); //첫번째둜 μ‹€ν–‰

 

 

μ˜ˆμ‹œ. μƒμ„±μž ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ this 

function Student(name, gender, school) {
  this.name = name;
  this.gender = gender;
  this.school = school;
}

var kd = new Student("길동", "male", "μƒν•˜μ΄λŒ€");

console.log(kd); 
//Student { name: '길동', gender: 'male', school: 'μƒν•˜μ΄λŒ€' }

 

 

 

μ˜ˆμ‹œ. ν™”μ‚΄ν‘œ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ this

var fullname = 'Ciryl Gane'

var fighter = {  
    fullname: 'John Jones',
    opponent: {
        fullname: 'Francis Ngannou',
        getFullname: function () {
            return this.fullname;
        }
    },

    getFirstName: () => {
        return this.fullname.split(' ')[0];
    },

    getLastName: (function() {
        return this.fullname.split(' ')[1];
    })()
}
console.log(fighter.getFirstName());  //Ciryl 
console.log(fighter.getLastName)   //Gane

 

 

fighter.getFirstName() μ—μ„œμ˜ thisλŠ” windowκ°€ λ˜λŠ”κ±Έ 확인 ν•  수 μžˆλ‹€. 

fighterκ°€ 되게 ν•˜λ €λ©΄ ν™”μ‚΄ν‘œ ν•¨μˆ˜κ°€ μ•„λ‹Œ, 일반 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.