js

javascript ์ƒ์†, ํ”„๋กœํ† ํƒ€์ž…(Prototype)

์œถโ‰ 2022. 10. 31. 23:33

 

* hasOwnProperty: ๊ฐ์ฒด์—๋Š” ์ž์‹ ์ด ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ. true/ false๋กœ ๊ฒฐ๊ณผ ์•Œ๋ ค์คŒ.

(๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์ด์šฉํ•ด ํ™•์ธ)

const user ={
    name:'Mike'
}
undefined
user.name
'Mike'
user.hasOwnProperty('name')
true
user.hasOwnProperty('age')
false

console ์ฐฝ์—์„œ usr ์ž…๋ ฅํ•˜๊ณ  name: "MIke" ์—์„œ ํ™”์‚ดํ‘œ๋ฅผ ๋ˆ„๋ฅด๋ฉด __proto__: Object ๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ์žˆ์Œ -> ํ”„๋กœํ† ํƒ€์ž…

* ํ”„๋กœํ† ํƒ€์ž…: ์ˆจ๊ฒจ์ง„ ํ”„๋กœํผํ‹ฐ. ๊ฐ์ฒด์—์„œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฝ์œผ๋ ค๊ณ  ํ•˜๋Š”๋ฐ ์—†์œผ๋ฉด __proto__์—์„œ ์ฐพ์Œ. ์ด๋ฅผ ์ด์šฉํ•ด ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ.

- ๋งŒ์•ฝ hasOwnProperty๊ฐ€ ๊ฐ์ฒด ์•ˆ์— ์žˆ๋Š” ๊ฒฝ์šฐ: ์ผ๋‹จ ๊ทธ ๊ฐ์ฒด์— ํ”„๋กœํผํ‹ฐ๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ ๊ฑฐ๊ธฐ์„œ ํƒ์ƒ‰์„ ๋ฉˆ์ถค. ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ”„๋กœํ† ํƒ€์ž…์—์„œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐพ์Œ.

์˜ˆ์‹œ)

- wheels๋ž‘ drive๋Š” ๋‚ด์šฉ ๋™์ผํ•ด์„œ __proto__๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ

const car = {
  wheels: 4,
  drive(){
    console.log("drive..");
  },
}; //์ƒ์œ„ ๊ฐœ๋…์˜ ๊ณตํ†ต ๊ฐ์ฒด

const bmw = {
  color: 'red',
  navigation: 1,
};

const benz = {
  color: 'black',
};

const audi = {
  color: 'blue',
};

bmw.__proto__ = car;
benz.__proto__ = car;
audi.__proto__ = car;
//car๊ฐ€ ๊ฐ ํ•ด๋‹นํ•˜๋Š” ํ”„๋กœํ† ํƒ€์ž…์ด ๋จ = bmw, benz, audi๋Š” car์˜ ์ƒ์†์„ ๋ฐ›์Œ

-> console์ฐฝ์— bmw.wheels ์ž…๋ ฅ ์‹œ 4๊ฐ€ ๋‚˜์˜ด

 

* ์ƒ์†์€ ๊ณ„์† ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Œ

const car = {
  wheels: 4,
  drive(){
    console.log("drive..");
  },
}; 

const bmw = {
  color: 'red',
  navigation: 1,
};
bmw.__proto__ = car;

const x5 ={
  color: "white",
  name: "x5",
};
x5.__proto__ = bmw;

-> ์ƒ์œ„ ๊ฐ์ฒด car์— ์ž…๋ ฅํ•œ ๋‚ด์šฉ๊ณผ x5 ์ž…๋ ฅํ•œ ํ”„๋กœํ† ํƒ€์ž… ๋ชจ๋‘ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Œ.  ( car > bmw > x5)

=> ์ด๋Ÿฌํ•œ ์—ฐ์‡„์ ์ธ ๋ถ€๋ถ„์„ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ(Prototype Chain) ์ด๋ผ๊ณ  ํ•จ.

 

 

 

 

โ—Ž for in์„ ์ด์šฉํ•ด์„œ ๊ฐ์ฒด ์ˆœํ™˜ํ•  ๊ฒฝ์šฐ: name๊ณผ color๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ํ”„๋กœํ† ํƒ€์ž…์—์„œ ์ •๋ฆฌํ•œ ํ”„๋กœํผํ‹ฐ
- object.keys๋Š” ์ƒ์†๋œ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š์Œ. name๊ณผ color์— ๋Œ€ํ•œ key ๊ฐ’๋งŒ ๋‚˜์˜ด

 

 

 

 

 


โ—Žfor in์—์„œ ๊ตฌ๋ถ„ํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ: hasOwnProperty ์‚ฌ์šฉํ•˜๊ธฐ

๊ฐ์ฒด๊ฐ€ ์ง์ ‘ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ๋งŒ true๋ฅผ ๋ฐ˜ํ™˜ํ•ด์คŒ

 

 

 

 

 

 

 

- ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ์ด์šฉํ•˜๋ฉด ๋น„์Šทํ•œ ๊ฐ์ฒด๋ฅผ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ

์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ๊ฐ์ฒด์— __proto__๋ฅผ prototype์„ ์ด์šฉํ•ด ์„ค์ •

const Bmw = function(color){
  this.color = color;
};
Bmw.prototype.wheels = 4;
Bmw.prototype.drive = function(){
  console.log("drive..");
};
Bmw.prototype.navigation = 1;
Bmw.prototype.stop = function(){
  console.log("stop!");
};
const x5 = new Bmw("red")
const z4 = new Bmw("blue")
//x5.stop(); -> stop!

* instance: ์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋‚ผ ๋•Œ ๊ทธ ๊ฐ์ฒด๋Š” ์ƒ์„ฑ์ž์˜ instance ๋ผ๊ณ  ๋ถˆ๋ ค์ง€๋Š”๋ฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์ด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” instanceof ์—ฐ์‚ฐ์ž๊ฐ€ ์žˆ์Œ.

- instanceof: ์ด๋ฅผ ์ด์šฉํ•ด ์ƒ์„ฑ์ž์™€ ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๊ณ  ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ์ž๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ๊ฒƒ์ธ์ง€ ํŒ๋‹จํ•˜์—ฌ true / false๋กœ ๋ฐ˜ํ™˜

์˜ˆ์‹œ)z4 instanceof Bmw -> true: z4๋Š” Bmw๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋จ ๊ทธ๋ž˜์„œ Bmw์˜ instance. 

 

*constructor: ๊ฐ์ฒด๋ฅผ ๋งŒ๋“  ์ƒ์„ฑ์ž ํ•จ์ˆ˜. ์—ฌ๊ธฐ์„œ๋Š” ์ƒ์„ฑ์ž์ธ Bmw์— ํ•ด๋‹น

์˜ˆ์‹œ) z4.constructor === Bmw; -> true

- ์ฃผ์˜ํ•  ์ : ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ฎ์–ด์“ฐ๊ฒŒ ๋˜๋ฉด constructor ๊ฐ’์ด false๊ฐ€ ๋‚˜์˜ค๋ฏ€๋กœ ํ•˜๋‚˜์”ฉ ์“ฐ๊ฑฐ๋‚˜ ์ง์ ‘ ์ˆ˜๋™์œผ๋กœ ์ ์–ด๋„ฃ์–ด์•ผ ํ•จ.

const Bmw = function(color){
  this.color = color;
};
Bmw.prototype = {
  wheels: 4,
  drive(){
    console.log("drive..");
  },
  navigation: 1,
  stop(){
    console.log("stop!");
  },
};
const x5 = new Bmw("red")
const z4 = new Bmw("blue")

//z4.constuctor === Bmw; -> false
const Bmw = function(color){
  this.color = color;
};
Bmw.prototype = {
  constructor: Bmw,
  wheels: 4,
  drive(){
    console.log("drive..");
  },
  navigation: 1,
  stop(){
    console.log("stop!");
  },
};
const x5 = new Bmw("red")
const z4 = new Bmw("blue")

//z4.constuctor === Bmw; -> true

=> ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ช…ํ™•ํ•œ constructor์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ. ๊ฐœ๋ฐœ์ž์— ์˜ํ•ด์„œ ์–ธ์ œ๋“ ์ง€ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Œ์„ ์—ผ๋‘ํ•ด๋‘๊ธฐ

const Bmw = function(color){
  this.color = color;
};
const x5 = new Bmw("red");
//x5.color = "black"; ->'black'
//x5.color ->'black'

- ํด๋กœ์ €๋ฅผ ์ด์šฉํ•ด์„œ ์ดˆ๊ธฐ์˜ ๊ฐ’๋งŒ ์–ป์„ ์ˆ˜ ์žˆ๊ณ  ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ.

const Bmw = function(color){
  const c = color;
  this.getColor = function() {
    console.log(c);
  };
};
const x5 = new Bmw("red");

 

'js' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

javascript ํ”„๋กœ๋ฏธ์Šค (Promise)  (0) 2022.11.01
javascript ํด๋ž˜์Šค(class)  (0) 2022.11.01
javascript ๋ฉ”์„œ๋“œ call, apply, bind  (0) 2022.10.31
javascript setTimeout / setInterval  (0) 2022.10.31
javascript ํด๋กœ์ €(Closure)  (0) 2022.10.28