JavaScript

JavaScript에서 Object 및 this

쭈녁 2023. 12. 27. 18:36

 

JS 객체 형식

 

예시)

const 객체명 = {
	프로퍼티 : ‘값’,
}

 

자바 객체의 특징

 

1. 함수의 프로퍼티

     - 선언된 객체의 내부 프로퍼티는 확정된 틀이 아니며 추후 프로퍼티와 값이 추가될 수도 있다.

 

 

예시)

const obj = {
  name : 'a',
  age : 10,
}

obj.id = 1;
obj['gender'] = 'male';
console.log(obj)
/*
{
  "name": "a",
  "age": 10,
  "id": 1,
  "gender": "male"
}
*/

delete obj.gender;
console.log(obj)
/*
{
  "name": "a",
  "age": 10,
  "id": 1
}
*/

 

 

 

 

2. 함수를 통한 생성

 

    - 함수를 정의 하고 함수를 실행하면서 객체를 만들어 변수에 넣을 수 있다.

    - in 을 통해 프로퍼티의 존재 여부를 확인 할 수 있다.

 

 

예시)

function makeObject(name, age){
  return{
    name:name,
    age:age,
    id: 1
  }
}
const obj = makeObject('a',10);
console.log(obj)
/*
{
  "name": "a",
  "age": 10,
  "id": 1
}
*/

console.log("age" in obj);		//true
console.log("gender" in obj);	//false

 

 

 

3. 객체가 가르키는 프로퍼티

 

    - 객체의 프로퍼티를 바꾸면 변수의 프로퍼티를 바꾸는게 아니라 객체 자체의 프로퍼티 값이 변경된다.

    - this가 가지고 있는 값은 유지된다.

 

 

예시)

let obj = {
  name: 'A',
  printName: function(){
    console.log(obj.name)	// 모든 obj 객체의 name 값을 의미
  }
};
console.log(obj.name)	//"A"

let obj2 = obj;
obj2.name = 'B'

console.log(obj.name)	//"B"

//obj2의 이름을 바꾸면 obj의 이름도 바뀐다. 모두 하나의 객체를 참조하고 있다.
let obj = {
  name: 'A',
  printName: function(){
    console.log(obj.name)	// 모든 obj 객체의 name 값을 의미
  }
};
obj.printName()		//"A"

let obj2 = obj; 
obj.name = 'B'

obj.printName()		//"B"
obj2.printName()	//"B"

//obj2의 이름을 바꾸면 obj의 이름도 바뀐다. 모두 하나의 객체를 참조하고 있다. 22
let obj = {
  name: 'A',
  printName: function(){
    console.log(obj.name)
  }
};

let obj2 = obj;
obj = null;
obj2.printName()	//nullPoint 애러 발생

 

 

 

 

this

   

- this는 변수에 할당된 자기 자신을 의미한다. 따라서 객체의 프로퍼티 값을 바꾸어도 this를 통해 변수의 값에 접근할 수 있다.

 

 

예시)

let obj = {
  name: 'A',
  printName: function(){
    console.log(this.name)	// =>자기의 name값을 가르킨다
  }
};
let obj2 = obj;
obj = null;
obj2.printName()	// "A"

 

 

 

 

화살표 함수에서의 This

 

    - 화살표 함수 안의 this는 그 함수가 속해 있는 스코프의 상위 스코프의 전역 객체를 가르킨다. 

 

 

예시)

let obj = {
  name: 'A',
  printName: () =>{
    console.log(this.name)
  }
};

obj.printName() //화살표 함수 사용시 this는 상위 스코프의 전역 객체 반환 => 윈도우 객체

 

const cat = {
  name: 'A',
  foo1: function() {
    const foo2 = function() {
      console.log(this.name);
    }
    foo2();
  }
};

cat.foo1();	// undefined

const cat = {
  name: 'A',
  foo1: function() {
    const foo2 = () => {
      console.log(this.name);
    }
    foo2();
  }
};

cat.foo1();	// A

 

 

'JavaScript' 카테고리의 다른 글

await 와 async  (0) 2024.05.28
Symbol  (0) 2024.01.21
Object 메서드 정리  (0) 2024.01.12
변수와 생성자 함수  (1) 2024.01.05
자바스크립트 기본  (0) 2023.12.16