-
Notifications
You must be signed in to change notification settings - Fork 0
ecmascript_4_1
- ES5: strict ๋ชจ๋์์๋ ์๋ฌ๊ฐ ๋ฐ์
- ES6: strict ๋ชจ๋์ ๊ด๊ณ์์ด ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด ๋์ค์ ์์ฑ๋ ๊ฐ์ผ๋ก ๋์ฒด๋จ
let sameKey = { one: 1, one: 2};
console.log(sameKey); // Object {one: 2}let one = 1, two = 2;
let values = { one, two };
console.log(values); // Object {one: 1, two: 2}// ES5
var obj = {
getTotal: function(param) {
return param;
}
}
// ES6
let obj = {
getTotal() {
return param;
}
}ES5์ Object ํด๋์ค์๋ ํ๋กํผํฐ ๋์คํฌ๋ฆฝํฐ๊ฐ ์ถ๊ฐ๋์๋ค.
Data ํ์
-
value: ํ๋กํผํฐ ๊ฐ์ผ๋ก ์ฌ์ฉ -
get: ํ๋กํผํฐ์ ์ ๊ทผํ ๋ ํธ์ถ๋๋ ํจ์ -
set: ํ๋กํผํฐ์ ๊ฐ์ ํ ๋นํ ๋ ํธ์ถ๋๋ ํจ์ Access ํ์ -
enumerable: ํ๋กํผํฐ์ ์ด๊ฑฐ ๊ฐ๋ฅ์ฌ๋ถ ์ค์ -
configurable: ํ๋กํผํฐ์ ์ญ์ ๊ฐ๋ฅ์ฌ๋ถ ์ค์ -
writable: ํ๋กํผํฐ์ ์ฐ๊ธฐ ๊ฐ๋ฅ์ฌ๋ถ ์ค์
var obj = {};
// ์ด ๋ฉ์๋๋ก ๊ฐ์ฒด์ Property๋ฅผ ์๋ก ์ ์ํ๊ฑฐ๋ property descriptor๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
// ๋ฐ์ดํฐ ํ์
๊ณผ ์ก์ธ์ค ํ์
์ ์์ฑ์ ๊ฐ์ด ์์ฑํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
Object.defineProperty( obj, "value", {
value: true,
writable: false,
enumerable: true,
configurable: true
});
(function(){
var name = "John";
Object.defineProperty( obj, "name", {
get: function(){ return name; },
set: function(value){ name = value; }
});
})();
console.log( obj.value ); // true
console.log( obj.name ); // John
obj.name = "Ted";
console.log( obj.name ); // Ted
for ( var prop in obj ) {
console.log( prop ); // value, name
}
obj.value = false; // Exception if in strict mode
Object.defineProperty( obj, "value", {
writable: true,
configurable: false
});
obj.value = false;
console.log( obj.value ); // false
delete obj.value; // ExceptionES5์ getter์ setter๋ access descriptor๋ฅผ ์์ ํด์ผํ๋ ์ ํ์ ์ธ ์ ๊ทผ์ด๋ค.
๋ฐ๋ผ์ ES6์์๋ ๋ณด๋ค ์ง๊ด์ ์ผ๋ก getter์ setter๋ฅผ ์ ์ํ ์ ์๋ค.
// ES5 getter
var obj = {};
Object.defineProperty(obj, "book", {
get: function(){
return "์ฑ
";
}
});
console.log(obj.book) // ์ฑ
// ES5 setter
var obj = {};
Object.defineProperty(obj, "item", {
set: function(param){
this.sports = param;
}
});
obj.item = "์ผ๊ตฌ"
console.log(obj.sports); // ์ผ๊ตฌ// ES6 getter
let obj = {
value: 123,
get getValue(){
return this.value;
}
};
console.log(obj.getValue);
// ES6 setter
let obj = {
set setValue(value){
this.value = value;
}
};
obj.setValue = 123;
console.log(obj.value);- ๋ณ์์ ์๋ก์ด ๊ฐ์ ํ ๋นํ ๋๋ง๋ค Validation์ ๊ฒ์ฌํ ์ ์๊ฒ ๋ฉ๋๋ค.
- lazy loading์ ํ ์ ์๊ฒ ๋ฉ๋๋ค.
- read์ write ๊ถํ์ ๋ค๋ฅด๊ฒ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด getter๋ pubic, setter๋ private
- ์์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, getter์ setter๋ฅผ overridingํด์ ํด๋์ค๋ง๋ค validation ๋ฑ์ ๋ค๋ฅด๊ฒ ํ ์ ์์ต๋๋ค
getter, setter๋ ์ ๋ง ํ์ํ ๊ฑธ๊น?
๋ ๊ฐ๊ณผ ๊ฐ ํ์ ์ ๋น๊ตํ๋ค. ์ค๋ธ์ ํธ๋ฅผ ๋น๊ตํ๋๊ฒ์ด ์๋๋ค.
Object.is(1, "1")); // false;๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ ์ค๋ธ์ ํธ ํ๋กํผํฐ๋ฅผ ์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ ์ค๋ธ์ ํธ ๋์ ๋ณต์ฌํ๊ณ , ์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐํํ๋ค.
// ์ค๋ธ์ ํธ๋ฅผ ํ ๋นํ๋ฉด ๊ฐ์ด ์ฐ๋๋๋ค.
let sports = {
event: "์ถ๊ตฌ",
palyer: 11
}
let dup = sports;
sports.player = 55;
console.log(dup.player); // 55
dup.event = "๋๊ตฌ";
console.log(sports.event); // ๋๊ตฌ
// assign์ ์ด์ฉํด ์ฐ๋๋์ง ์๊ณ ํ๋กํผํฐ๋ฅผ ๋ณต์ฌํ๋ค.
let sports = {
event: "์ถ๊ตฌ",
palyer: 11
}
let dup = Object.assign({}, sports);
console.log(dup.player); // 11
dup.player = 33;
console.log(sport.player); // 11
sports.event = "์์"
console.log(dup.event) // ์ถ๊ตฌObject.assign() ๋ณต์ฌํ ๊ฐ์ด ์ฐ๋๋์ง ์์ง๋ง, ๋ฐํ๋๋ ์ค๋ธ์ ํธ์ ์ฒซ๋ฒ์งธ ์ค๋ธ์ ํธ๋ ์ฐ๋๋๋ค.
let oneObj = {one: 1}, twoObj = {two: 2};
let mergeObj = Object.assign(oneObj, twoObj);
console.log(Object.is(oneObj, mergeObj)); // true
mergeObj.one = 456;
console.log(Object.is(oneObj, mergeObj)); // true// ๋ค์์ ์ค๋ธ์ ํธ๋ฅผ ์์ฑํ ์ ์๋ค.
let obj = {one: 1};
Object.assign(obj, {two: 2}, {two: 3}, {four: 4});
for (var pty in obj){
console.log(pty, obj[pty]);
}
// one 1 two 3 four 4์ค๋ธ์ ํธ์ ํ๋กํผํฐ๋ฅผ ๋ณต์ฌํ ๋ ํ๋กํผํฐ๊ฐ getter์ด๋ฉด ํจ์๋ฅผ ๋ณต์ฌํ์ง ์๊ณ ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ฐํ๋ ๊ฐ์ ๋ณต์ฌํ๋ค.
let count = {
current: 1,
get getCount() {
return ++this.current;
}
};
let mergeObj = {}
Object.assign(mergeObj, count);
console.log(mergeObj); // Object { current: 1, getCount: 2}์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ ์ค๋ธ์ ํธ ๋๋ ์ธ์คํด์ค๋ฅผ ์ง์ ํ๊ณ , ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ์๋ ์ค๋ธ์ ํธ์ prototype์ ์ง์ ํ์ฌ
ํด๋น prototype์ ์ฐ๊ฒฐ๋ ํ๋กํผํฐ๋ฅผ ์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ธ ์ค๋ธ์ ํธ์ __proto__์ ์ฒจ๋ถํ๋ค. (๊ณต์ )
let Sports = function(){};
Sports.prototype.getCount = function(){
return 123;
}
let protoObj = Object.setPrototypeOf({}, Sports.prototype);
console.log(protoObj.getCount()) // 123