javascriptλ νλ‘ν νμ
κΈ°λ° μΈμ΄μ΄λ€.->μ΄λ₯Ό κΈ°λ°μΌλ‘ νμ₯κ³Ό μ¬μ¬μ©μ±μ λμΈλ€.(like ν΄λμ€)
νλ‘ν νμ
μ μ¬μ μ μλ―Έ = 'μν'
κ°μ²΄μ νλ‘ν νμ
(μν)μ κ°μ§κ³ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±ν΄κ°λ νλ‘κ·Έλλ° λ°©μ
μμ±λ κ°μ²΄λ μκΈ°μμ μ νλ‘ν νμ
μ κ°λλ€. -> μκΈ° μμ μ΄ λ§λ€μ΄μ§κ² λ μνμ μλ€.
μ§κΈμ javascriptμμ ν΄λμ€λ₯Ό μ§μνκΈ° μμνμ§λ§,
μλ μλ°μ€ν¬λ¦½νΈλ νλ‘ν νμ κΈ°λ°μ μΈμ΄λ‘ κ°μ²΄μ νμ₯κ³Ό μ¬μ¬μ©, μμμ ꡬννλ€.
const animal={ name:'tiger' };
console.log(animal.name); //tiger
animal.birthday='20220101';
console.log(animal.birthday); //20220101
//μμ±μ΄ μλμ§ μλμ§ μ²΄ν¬νλ hasOwnProperty()λ©μλ μ¬μ© - 'hasOwnProperty()'λ Object(μ΅μμ)κ°μ²΄μ λ©μλ
console.log(animal.hasOwnProperty('birthday')); //true
console.log(animal.hasOwnProperty('country')); //false
console.log(animal)
/*
{name: 'tiger', birthday: '20220101'}
birthday: "20220101"
name: "tiger"
[[Prototype]]: Object
*/
// λΉ κ°μ²΄λ νλ‘ν κ°μ²΄(Object)λ₯Ό κ°μ§κ³ μλ€.
const aaa={}
console.log(aaa)
/*
{}
[[Prototype]]: Object
*/
// hasOwnPropertyλ₯Ό animal() κ°μ²΄μ μ μνλ©΄, λΆλͺ¨λ‘ μ¬λΌκ°μ§ μκ³ μκΈ°μμ μ λ©μλλ‘μ μ¬μ©
const animal={
hasOwnProperty:function(){
console.log("νΈλμ΄λ ")
}
}
animal.hasOwnProperty(); //νΈλμ΄λ
μλ°μ€ν¬λ¦½νΈ ν¨μμ λ΄λΆμ κ°μ²΄κ°μ κ΄κ³
1. ν¨μκ° λ§λ€μ΄μ§κ³ μνμ΄ λμ΄μ§λ©΄, λ΄λΆμμλ ν¨μ μμ κ³Ό κ°μ μ΄λ¦μ κ°μ²΄κ° μμ±
( Fruit ν¨μ / Fruit νλ‘ν νμ κ°μ²΄ )
-> νλ‘ν νμ μ λ©μλλ₯Ό μΆκ°, λ¬Όλ‘ ν¨μμλ μΆκ°ν μ μμΌλ λ©λͺ¨λ¦¬ λ¬Έμ λ‘ νλ‘ν νμ μ μΆκ°
2. Fruit ν¨μ λ©€λ²λ‘ prototype μμ±μ΄ μμ±
- λ€λ₯Έ κ³³μ μμ±λ κ°μ ν¨μ μ΄λ¦μ animal νλ‘ν νμ κ°μ²΄λ₯Ό κ°λ¦¬ν΄.(μ°Έμ‘°)
Fruit ν¨μ | Fruit νλ‘ν νμ κ°μ²΄ |
+prototype --> Fruit νλ‘ν νμ κ°μ²΄(μ°Έμ‘°) | + constructor --> Fruit ν¨μ(μ°Έμ‘°) + grow() |
μ΄λ° μν©μΌλ "Fruit νλ‘ν νμ κ°μ²΄"λ
μμ±μ ν¨μμ new μ°μ°μλ₯Ό ν΅ν΄μ λ§λ€μ΄λ΄λ λͺ¨λ κ°μ²΄μ μνμ΄ λλ κ°μ²΄μ΄λ€.
function Fruit(){}
let apple=new Fruit();
let banana= new Fruit();
console.log(apple);
console.log(banana);
- μ΄λ κ² new μ°μ°μμ μμ±μ ν¨μλ₯Ό μ΄μ©νμ¬ κ°μ²΄ μμ±μ κ° κ°μ²΄μλ--> __proto__μμ±μ΄ μλμΌλ‘ μμ±
- μ΄ μμ±(__proto__)μ κ°μ²΄κ° λ§λ€μ΄μ§ μ μλλ‘ ν΄ μ€ μνμ κ°λ¦¬ν΄.--> "Fruit νλ‘ν νμ κ°μ²΄"λ₯Ό μ¨μ λ§ν¬λ‘ κ°λ¦¬ν¨λ€(μ°Έμ‘°)
"Fruit νλ‘ν νμ κ°μ²΄"λ apple, bananaμ κ°μ κ°μ²΄λ€μ μνμ΄ λλ κ°μ²΄.
--> apple, bananaμ κ°μ κ°μ²΄λ€μ "Fruit νλ‘ν νμ κ°μ²΄"μ μ κ·Όμ΄ κ°λ₯νκ³ ,
"Fruit νλ‘ν νμ κ°μ²΄"μ λ©€λ² ν κ°λ₯Ό μΆκ°νλ©΄, μΆκ°λ λ©€λ²λ₯Ό 곡μ νμ¬ μ¬μ©ν μ μλ€
//"νλ‘ν νμ
κ°μ²΄"μ λ©€λ² μΆκ°νκΈ°
Fruit.prototype.Grow=function(){
return "μ±μ₯νλ€";
}
console.log(apple.Grow()); //μ±μ₯νλ€.
console.log(banana.Grow()); //μ±μ₯νλ€.
λΆλͺ¨(μν)μ μλ Grow() λ©μλλ₯Ό apple, banana κ°μ²΄ λ΄μμ μ¬μ μνλ©΄-> μ΄κ² μ μ©λλ€.
//apple κ°μ²΄λ΄μ Grow() λ©μλ μΆκ°
apple.Grow=function(){
return "μ¬κ³Όκ° μ±μ₯νλ€"
}
console.log(apple.Grow()); //μ¬κ³Όκ° μ±μ₯νλ€.
console.log(banana.Grow()); //μ±μ₯νλ€.
//μμ± μΆκ°
apple.hasRed=true
console.log(apple.hasRed) //true
console.log(banana.hasRed) //undefined
λ©€λ²λ₯Ό μΆκ°, μμ , μμ -->prototype μμ±μ ν΅ν΄μ μ μ©
λ©€λ²λ₯Ό μ½λ κ² --> κ°μ²΄λͺ
or ν¨μμ prototype μμ±μ ν΅ν΄μ μ κ·Όμ΄ κ°λ₯
console.log(banana.Grow()); //μ±μ₯νλ€.
console.log(Fruit.prototype.Grow()); //μ±μ₯νλ€.
κ°μ²΄ μμ±μ μμ±μ μμμ λ©μλλ₯Ό μ μνλ©΄, κ°μ²΄λ₯Ό μμ±ν λλ§λ€ λ©μλλ μλ‘ μμ±λ¨ -> λ©λͺ¨λ¦¬ λλΉ
κ·Έλ¬λ―λ‘ νλ‘ν νμ κ°μ²΄μ λ©μλλ₯Ό μ μΈνλκ² μ’μ.
function Add(x,y){
this.x=x;
this.y=y;
this.plus=()=>{
return this.x+this.y;
}
}
let add1=new Add(100,20);
console.log(add1.plus()); //120
console.log(add1) // Add {x: 100, y: 20, plus: ƒ}
let add2=new Add(200,30);
let add3=new Add(300,40);
console.log(add2); // Add {x: 200, y: 30, plus: ƒ}
console.log(add3); // Add {x: 300, y: 40, plus: ƒ}
function Add2(x,y){
this.x=x;
this.y=y;
}
Add2.prototype.plus=function(){
return this.x+this.y;
}
let newadd1=new Add2(100,20);
let newadd2=new Add2(200,30);
console.log(newadd1); // Add2 {x: 100, y: 20} - plus λ©μλκ° μλ‘ μμ±λμ§ μμ
console.log(newadd2); // Add2 {x: 200, y: 30}
console.log(newadd1.plus()); // 120
console.log(newadd2.plus()); // 230
μλ°μ€ν¬λ¦½νΈλ κ°μ²΄ μ§ν₯ μΈμ΄λ‘ νλ‘ν νμ μμμ κΈ°λ°μ λ OOPμΈμ΄μ΄λ€. μ΅κ·ΌμμΌ ν΄λμ€ λ¬Έλ²μ΄ μ§μλκΈ° μμνλ€.
μμμ νμμ± - 1. μ¬μ¬μ©μ± 2. νμ₯μ±
νλ‘ν νμ μ²΄μΈ = '__proto__' : μν(λΆλͺ¨)λ₯Ό κ°λ¦¬ν΄.
μμ κ°μ²΄κ° __proto__κ° κ°λ¦¬ν€λ λΆλͺ¨κ°μ²΄μ λ©€λ²(μμ±, λ©μλ)λ₯Ό μ¬μ©ν μ μλ€.
__proto__μμ±μ΄ κ°λ¦¬ν€λ κ²μ λ°κΏ μ μλκ°? = μν(λΆλͺ¨)λ₯Ό λ°κΏ μ μλκ°? YES
let obj1={
name:'μ£Όμ°μ¬',
age : 36,
sayHi(){
console.log("hi~ " + this.name);
}
}
let obj2={
name:"μ€λ³΄λ―Έ"
}
console.log(obj2) //{name: 'μ€λ³΄λ―Έ'} Prototypeμ Object(μ΅μμ)κ°μ²΄
obj2.__proto__=obj1; // μν(λΆλͺ¨)λ°κΎΈκΈ°
console.log(obj2); // {name: 'μ€λ³΄λ―Έ'} Prototypeμ Object(obj1)κ°μ²΄ - μλ μ΄λ―Έμ§ μ°Έκ³
λΉ κ°μ²΄λ₯Ό μμ±ν νμ __proto__μμ±μ μνλ κ°μ²΄(λΆλͺ¨, μνμ΄ λ )λ₯Ό ν λΉ
let obj3={}; //νμ¬ obj3μ μν(λΆλͺ¨)λ Object(μ΅μμ)
console.log(obj3); // μ°μΈ‘ μ΄λ―Έμ§ μ°Έκ³
obj3.__proto__=obj2;
console.log(obj3.hasOwnProperty()); // false
//μ΅μμ Objectλ₯Ό νλ‘ν νμ
체μΈμΌλ‘ μ¬μ©ν μ μλ€.
javascriptλ "νλ‘ν νμ κΈ°λ°μ κ°μ²΄μ§ν₯μΈμ΄"
1. μμ μκ² μλ νΉμ±(μμ±, λ©μλ)μ __proto__κ° κ°λ¦¬ν€λ μν(λΆλͺ¨)μκ² κ°μ Έμ¨λ€.
2. μ΄λ, 맨 νμ μμ κ°μ²΄μμλΆν° μμ°¨μ μΌλ‘ μ°κ²°λμ΄μλ μνμ μ°Ύμκ°λ€ ="νλ‘ν νμ
체μΈ"
3. νλ‘ν νμ
체μΈμ μ¬μ©ν΄μ κ°μ²΄μ νΉμ±μ μ ν ="νλ‘ν νμ
μμ"
console.log(obj3.name); // μ€λ³΄λ―Έ
console.log(obj3.age); // 36
obj3.sayHi(); //hi~ μ€λ³΄λ―Έ
κ°μ²΄μ νλ‘ν νμ μ μΆλ ₯νλ λ°©λ²μ 2κ°μ§κ° μλ€.
'__proto__' vs ' Object.getPrototypeOf() '
λ λ€ μ λ§νλ©΄ λκ°μ§λ§, κ°νΉ '__proto__' λ μ§μνμ§ μλ λΈλΌμ°μ κ° μ‘΄μ¬νλ€κ³ νλ€.
function A(){}
let obj=new A();
console.log(obj.__proto__); // {constructor: ƒ}
console.log(obj)
console.log(Object.getPrototypeOf(obj)); //{constructor: ƒ}
function B(){}
let obj2=new B();
console.log(obj2.__proto__===Object.getPrototypeOf(obj2)) //true
μμ±μ ν¨μμ λ΄λΆμμ μ²λ¦¬λλ λμλ€
function Add(a,b){
this.a=a;
this.b=b;
}
Add.prototype.plus=function(){
return this.a+this.b
}
const newobj = {}; // νμ¬ protoλ Object(μ΅μμ)
newobj.__proto__= Add.prototype; //newobjμ protoλ₯Ό Addμ νλ‘ν νμ
κ°μ²΄λ‘ λ°κΏ.
console.log(newobj) // Add{}
Add.apply(newobj, [111,222]) //μΈμκ°λ€μ νλλ‘ λ¬Άμ΄μ μ μ©
console.log(newobj) // Add {a: 111, b: 222}
console.log(newobj.plus()); // 333
function Animal(name, age){
this.name=name;
this.age=age;
}
Animal.prototype.aaa=function(){
console.log('aaa');
}
function Animal2(name, age){
this.name=name;
this.age=age;
}
Animal2.prototype.bbb=function(){
console.log('bbb');
}
let obj1=new Animal('tiger',20);
obj1.aaa(); // aaa
obj1.__proto__=Animal2.prototype;
obj1.bbb(); // bbb
μΈμ€ν΄μ€κ° μ΄λ€ μμ±μ ν¨μλ‘ μμ±λ κ²μΈμ§ μ°ΎκΈ°!
1. νλ‘ν νμ κ°μ²΄λ₯Ό μ°Ύκ³ , 2. κ·Έ νλ‘ν νμ κ°μ²΄ μμ 'constructor'κ°μ νμΈ
function A(){}
const testObj=new A();
console.log(testObj.constructor); // ƒ A(){}
console.log(A.prototype.__proto__) // Object(μ΅μμ)
console.log(A.prototype) // constructor: ƒ A()
testObj μΈμ€ν΄μ€κ° Aλ‘ μμ±λ κ²μΈμ§ νλ³ - instanceof μ°μ°μ, isPrototypeOf μ°μ°μ
console.log(testObj instanceof A) //true
μ°μ΅λ¬Έμ
const housing={
toilet:1,
turnon() {
console.log( "turn on.." );
}
}
const apt = {
color: "red",
rooms: 4
};
const villa = {
color: "black",
rooms: 3
};
const oneroom = {
color: "blue",
rooms: 1
};
apt.__proto__=housing
villa.__proto__=housing
oneroom.__proto__=housing
console.log(apt)
console.log(villa)
console.log(oneroom)
const ipark={
name:'μμ΄νν¬',
rooms:5
}
ipark.__proto__=apt
console.log(ipark.name); //μμ΄νν¬
console.log(ipark.rooms); //5
console.log(ipark.color); //red
console.log(ipark.toilet); //1
ipark.turnon(); // turn on..
μμ μμ λ₯Ό μμ±μ ν¨μμ newμ°μ°μλ₯Ό μ¬μ©νλ μμ λ‘ μμ±ν΄λ³΄μ!
const Housing=function(name, color, rooms){
this.name=name;
this.color=color;
this.rooms=rooms;
}
Housing.prototype.toilet=1;
Housing.prototype.turnon=function(){
console.log("turn on..")
}
const apt=new Housing('apt', 'red','4')
console.log(apt.name); //apt
console.log(apt.color); //red
console.log(apt.rooms); //4
console.log(apt.toilet); //1
apt.turnon(); //turn on..
const oneroom = new Housing('oneroom','white','1')
console.log(oneroom.name) //oneroom
console.log(oneroom.color) //white
console.log(oneroom.rooms) //1
console.log(oneroom.toilet) //1
oneroom.turnon(); //turn on..
const ipark=new Housing ('μμ΄νν¬','blue','5');
console.log(ipark.name) //μμ΄νν¬
console.log(ipark.color) //blue
console.log(ipark.rooms) //5
console.log(ipark.toilet) //1
ipark.turnon();
ipark.name="λ λ―Έμ"
console.log(ipark.name); //λ λ―Έμ
// μΈλΆμμ μμ½κ² μμ μ΄ κ°λ₯ν¨. -> μμ μ΄ μλκ²λ νλ €λ©΄..?!
'javascript > ES6' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
ES6 javascript : λΉλκΈ° μ²λ¦¬(callback, Promise, Generator) (0) | 2022.01.27 |
---|---|
ES6 javascript : setTimeout vs setInterval - νΈμΆ μ€μΌμ€λ§ ν¨μ (0) | 2022.01.26 |
ES6 javascript κ°μ²΄ : μ λλ μ΄ν°(Generator), λΉλκΈ° (0) | 2022.01.24 |
ES6 javascript : Symbol(μ¬λ³Ό) (0) | 2022.01.18 |
ES6 Javascript : set()μλ£κ΅¬μ‘° - keys(), values() (0) | 2022.01.18 |