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