Class
JSμμλ ν΄λμ€λ₯Ό μ¬μ©νμ¬ κ°μ²΄ μ§ν₯μ μΌλ‘ νλ‘κ·Έλλ°μ΄ κ°λ₯νλ€.
ννμ
class λ₯Ό μ΄μ©ν΄ μ μΈνκ³ new
λ₯Ό μ΄μ©ν΄ μμ±
class User {
constructor(name) {
//μμ±μ
this.name = name;
}
sayHi() {
alert(this.name);
}
}
let user = new User('John');
user.sayHi();
alert(typeof User); // function
alert(User === User.prototype.constructor); // true
alert(User.prototype.sayHi); // alert(this.name);
alert(Object.getOwnPropertyNames(User.prototype)); // constructor, sayHi
κΈ°λͺ ννμ
let User = class {
sayHi() {
alert('Hello');
}
};
new User().sayHi();
alert(MyClass); //error
ν΄λμ€ λμ μμ±
function makeClass(phrase) {
// ν΄λμ€λ₯Ό μ μΈνκ³ μ΄λ₯Ό λ°νν¨
return class {
sayHi() {
alert(phrase);
}
};
}
// μλ‘μ΄ ν΄λμ€λ₯Ό λ§λ¦
let User = makeClass('Hello');
new User().sayHi(); // Hello
μ리
μμ μ½λλ₯Ό μλ‘ User
λΌλ ν¨μλ₯Ό λ§λ€κ³ ν¨μλ μμ±μconstructor
λ‘ λΆν° μμ±νκ³ ν΄λμ€ λ΄μ λ©μλλ€μ User.prototype
μ μ μ₯νλ€
μΌλ°μ μΈ μμ±μ ν¨μμ λ€λ₯Έμ
classλ‘ λ§λ ν¨μμ νΉμ λ΄λΆ νλ‘νΌν°μΈ
[[FunctionKind]]:"classConstructor"
κ° μ‘΄μ¬νλ€. λ°λΌμnew
λ₯Ό λΆμ΄μ§ μκ³User();
μ κ°μ΄ κ·Έλ₯ νΈμΆνκ² λλ€λ©΄ μλͺ» μ¬μ©λκ²μ κ°μ§νκ³ μλ¬λ₯Ό λ°μμν¨λ€.prototypeμ λ©μλ μ 체μ
enumerable
νλκ·Έλ falseλ‘ ν΄λμ€ λ©μλλ μ΄κ±°κ° λΆκ°λ₯ νλ€.νμ
use strict
λͺ¨λλ‘ μ€νλμ΄ ν΄λμ€ μμ±μ μμ μ½λ μ 체μ μλμΌλ‘ μ격λͺ¨λκ° μ μ©λλ€.
getter/setter
리ν°λ΄μ μ¬μ©ν΄ λ§λ κ°μ²΄μ²λΌ getter/setterλ₯Ό λ§λ€ μ μλ€.
class User {
constructor(name) {
// setterλ₯Ό νμ±νν©λλ€.
this.name = name;
}
get name() {
return this._name;
}
set name(value) {
if (value.length < 4) {
alert('μ΄λ¦μ΄ λ무 μ§§μ΅λλ€.');
return;
}
this._name = value;
}
}
let user = new User('John');
alert(user.name); // John
user = new User(''); // μ΄λ¦μ΄ λ무 μ§§μ΅λλ€.
ν΄λμ€ νλ
νλ‘νΌν°μ΄λ¦ = κ°
μΌλ‘ νλλ₯Ό μΆκ°κ° κ°λ₯νλ©°, Obj.prototypeμ΄ μλ κ°λ³ κ°μ²΄μλ§ ν΄λμ€ νλκ° μ€μ λλ€.
class User {
name = 'John';
}
let user = new User();
alert(user.name); // John
alert(User.prototype.name); // undefined
Last updated