const a = ["a", "b", "c"];
/// 기존 map
const result = a.map(x => x + 1);
console.log(result); // [ 'a1', 'b1', 'c1' ]
/// map1 메소드 생성
Array.prototype.map1 = function(callback,thisArg){
let mapping = [];
for (var i = 0; i < this.length; i ++) {
var mappedValue = callback.call(thisArg || Window, this[i], i, this);
mapping[i] = mappedValue;
}
return mapping;
};
const result1 = a.map1(x => x + 1);
console.log(result1); // [ 'a1', 'b1', 'c1' ]
map 구현시 앞에 .(dot)
으로 접근 할 수 있는 이유는
map 메소드가 Array의 prototype안에 메소드가 저장되어 있어서 dot으로 접근이 가능하다
위의 코드 처럼 Array의 prototype안에 새로운 메소드를 구현하면 같은 방식으로 구현이 가능하다
즉, 자바스크립트는 prototype 객체로,
자바스크립트의 모든 객체는 자신의 부모 역할을 담당하는 객체와 연결되어 있다
그렇기 때문에 prototype에 메소드를 저장하고 사용할 수 있다
이것은 마치 객체 지향의 상속 개념과 같이 부모 객체의 프로퍼티 또는 메소드를 상속받아 사용할 수 있게 한다
이러한 부모 객체를 Prototype(프로토타입) 객체 또는 줄여서 Prototype(프로토타입)이라 한다