* 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 |