본문 바로가기
2. 우당탕탕 개발자/2-1. 공부기록

13Jan2020 TIL

by Little Monkey 2020. 1. 13.
반응형

상위 개체의 메소드를 불러오는 방법

: 상위개체.prototype.method.call(this, arguments)

FlyingHorse.prototype.goSomewhere = function(destination, milesToDestination) {
  if (milesToDestination < 10) {
    return Horse.prototype.goSomewhere.call(this, destination);
  } else {
    return this.name + " is flying to " + destination + "!";
  }
};

 

굳이 따로 지정해줄 필요는 없었다. 아래의 예제 처럼 (내가 쓴것^^!)

var FlyingHorse = function(name, color) {
  Horse.call(this, name);
  this.color = color;
  this.oldGoSomewhere = Horse.prototype.goSomewhere.bind(this);
};

FlyingHorse.prototype = Object.create(Horse.prototype);
FlyingHorse.prototype.constructor = FlyingHorse;

FlyingHorse.prototype.goSomewhere = function(destination, milesToDestination) {
  if (milesToDestination < 10) {
    return this.oldGoSomewhere(destination);
  }
  if (milesToDestination >= 10) {
    return this.name + " is flying to " + destination + "!";
  }

.call(this, arg1, arg2, ...args) VS .apply(this, 단일배열)


arr.forEach(callback(currentvalue[, index[, array]])[, thisArg]);

precourse 때부터 forEach를 제대로 배운적이 없다는 것을 깨달았다. forEach를 쓸 줄을 몰라서 reduce 를 쓰거나 항상 for loop를 주로 사용했는데, 오늘 처럼 시간이 있을 때 봐야겠다는 생각이 들어서 봤다.

let arr = [1,2,3,4,5];

//for loop 사용
for(let i = 0; i < arr.length; i++) {
  console.log(arr[i]);
};

//forEach 사용
arr.forEach(element => console.log(element));

.map() 의 활용

빈배열을 만들고 -> for loop를 이용해서 빈배열에 push 해주는 식으로 풀었는데, 그냥 map을 쓰면 될 일이었다.

var sport = {
  name: "basketball",
  players: [
    { name: "LeBron James", age: 31 },
    { name: "Kevin Durant", age: 28 }
  ],
  playerNames: function() {
    let arr = [];
    let players = this.players;
    for (let el of players) {
      arr.push(`${el.name} plays basketball`);
    }
    return arr;
  }
};
var sport = {
  name: "basketball",
  players: [
    { name: "LeBron James", age: 31 },
    { name: "Kevin Durant", age: 28 }
  ],
  playerNames: function() {
    return this.players.map(el =>`${el.name} plays basketball`);
  }
};

sport.playerNames(); 
// [ 'LeBron James plays basketball', 'Kevin Durant plays basketball' ]

Tree.prototype.map()

: callback에 따라 새로운 Tree를 만들어주는 것. 

 

새로운 트리를 만들어주고. 그 트리의 value에 callback한 값을 대입. 만약에 트리에 자식노드가 있다면, 각 자식 노드를 순회 + 재귀하면서  value 에 callback 한 값을 입력해준다.

Tree.prototype.map = function(callback) {
  let tree = new Tree();
  tree.value = callback(this.value);

  if (this.children) {
    for (let el of this.children) {
      tree.children.push(el.map(callback));
    }
  }

  return tree;
};

이렇게 풀 수도 있었다. callback 함수의 value를 가진 새로운 Tree로 시작해, 원래 tree의 자식들이 reduce 로 각각 순회+ callback 이 적용되며 처음 값으로 설정된 새로운 Tree의 자식들로 추가되는 것. 

Tree.prototype.map = function(callback) {
  return this.children.reduce(function(tree, child) {
    return tree.addChild(child.map(callback));
  }, new Tree(callback(this.value)));
};

반응형

'2. 우당탕탕 개발자 > 2-1. 공부기록' 카테고리의 다른 글

15Jan2010 TIL  (0) 2020.01.16
14Jan2020 TIL  (0) 2020.01.14
11Jan2020 TIL  (0) 2020.01.12
10Jan2020 TIL  (0) 2020.01.11
09Jan2020 TIL  (0) 2020.01.10

댓글