클린코드 자바스크립트 6-2 객체 다루기(Prototype 조작 지양하기, hasOwnProperty, 직접 접근 지양하기)
Clean Code JS 강좌는 여러 절로 구성되어 있습니다.
- 클린코드 자바스크립트 1-1 변수 다루기(let & const 사용, function scope & block scope)
- 클린코드 자바스크립트 1-2 변수 다루기(전역 공간 사용 최소화,임시 변수 제거하기)
- 클린코드 자바스크립트 1-3 변수 다루기(호이스팅)
- 클린코드 자바스크립트 2-1 타입 다루기(타입 검사)
- 클린코드 자바스크립트 2-2 타입 다루기(undefined & null, eqeq 줄이기)
- 클린코드 자바스크립트 2-3 타입 다루기(형변환 주의하기, isNaN)
- 클린코드 자바스크립트 3-1 경계 다루기(min-max,begin-end,first-last,접두사와 접미사, 매개변수 순서가 경계)
- 클린코드 자바스크립트 4-1 분기 다루기(값식문, 삼항 연산자)
- 클린코드 자바스크립트 4-2 분기 다루기(truthy & falsy, 단락 회로 평가)
- 클린코드 자바스크립트 4-3 분기 다루기(else if & else 피하기, Early Return, Default case 고려하기)
- 클린코드 자바스크립트 4-4 분기 다루기(Default case 고려하기, Nullish coalescing operator, 드모르간 법칙)
- 클린코드 자바스크립트 5-1 배열 다루기(JS의 배열은 객체다, Array.length, 배열 요소에 접근하기)
- 클린코드 자바스크립트 5-2 배열 다루기(유사 배열 객체, 불변성, for문 배열 고차 함수로 리팩토링)
- 클린코드 자바스크립트 5-3 배열 다루기(배열 메소드 체이닝 활용, map vs forEach, continue&break)
- 클린코드 자바스크립트 6-1 객체 다루기(Object Destructuring, Object.freeze)
- 클린코드 자바스크립트 6-2 객체 다루기(Prototype 조작 지양하기, hasOwnProperty, 직접 접근 지양하기)
- 클린코드 자바스크립트 7-1 함수 다루기([함수,메서드,생성자], argument & parameter,복잡한 인자 관리하기)
- 클린코드 자바스크립트 7-2 함수 다루기(default value, Rest Parameters, void & return, 화살표 함수)
- 클린코드 자바스크립트 7-3 함수 다루기(Callback Function, 순수 함수, Closure)
객체 다루기 😎
Prototype 조작 지양하기👍
- 이미 JS는 많이 발전했다.
- 직접 만들어서 모듈화 => 배포 => NPM
- JS 빌트인 객체를 건들지말자.
function Car {
this.name = name;
this.brand = brand;
Car.prototype.sayName = function () {
return this.brand + "-" + this.name;
}
}
class Car {
constructor(name, band) {
this.name = name;
this.brand = brand;
}
sayName() {
return this.brand + "-" + this.name;
}
}
const casper = new Car('캐스퍼','현대')
String.prototpye.welcome = function () {
return "hello";
};
console.log("str".welcome()); // 'hello' 매우 위험한 것
Array.prototype.forEach = function () {
return "hello";
};
console.log([].forEach()); // 'hello'
hasOwnProperty👍
- 다른 객체에 있는 hasOwnProperty를 불러올 수도 있다.
- 프로퍼티 명칭으로서 보호하지 않는다.
const person = {
name: "john",
};
person.hasOwnProperty("name"); // true
for (const key in object) {
if (Object.hasOwnProperty.call(object, key)) {
const element = object[key];
}
}
const foo = {
hasOwnProperty: function () {
return "hasOwnProperty";
},
bar: "string",
};
foo.hasOwnProperty('bar') // 'hasOwnProperty'
console.log(Object.prototype.hasOwnProperty.call(foo.'bar')) // true
// 함수를 따로 만들어 사용
function hasOwnProp(targetObj,targetProp) {
return Object.hasOwnProperty.call(targetObj, targetProp);
}
console.log(hasOwnProp(foo,'bar')); //true
직접 접근 지양하기👍
- 예측 가능한 코드를 작성해서 동작이 예측 가능하게 앱 구현
- getter, setter
const model = {
isLogin: false,
isValidToken: false,
};
function setLogin(bool) {
model.isLogin = bool;
}
function setValidToken(bool) {
model.isValidToken = bool;
}
// model에 대신 접근 O
// function login() {
// model.isLogin = true;
// model.isValidToken = true;
// }
// function logout() {
// model.isLogin = false;
// model.isValidToken = false;
// }
// model에 대신 접근 X
function login() {
setLogin(true);
setValidToken(true);
}
function logout() {
setLogin(false);
setValidToken(false);
}
someElement.addEventListener("click", login);