프로그래밍이라는 것은 언어와 호스트 환경에 제공하는 기능들을 통해서 새로운 소프트웨어를 만들어내는 것이기 때문에
내장 객체에 대한 이해는 프로그래밍의 기본이라고 할 수 있다.
자바스크립트의 내장 객체 중 배열이라는 것을 확장해보자.
let arr = new Array('Seoul', 'New York', 'Tokyo', 'Shanghai');
function getRandonFromArray(arr){
let index = Math.floor(Math.random() * arr.length);
return arr[index];
}
console.log(getRandomFromArray(arr));
함수 getRandomFromArray 안의 Math.floor(Math.random() * arr.length)을 주어 Array안에 들어있는 배열들을 랜덤하게 추출할 수 있도록 하였다.
Math.random으로 0이상1미만의 소수들이 랜덤으로 추출되고 arr.length를 곱해 최솟값 0부터 최댓값 4미만의 값의 랜덤 범위를 주었다.
Math.floor로 소수점 이하를 제거하여 0,1,2,3이 나오게 하였다.
결과로 인덱스값에 해당되는 값을 랜덤으로 가져와서 실행시킬 수 있다.
이 코드를 수정하여 함수를 배열 객체에 포함시켜 그 함수가 마치 배열에 내장된 메소드인 것처럼 기능을 사용할 수 있다.
Array.prototype.random = function(){
let index = Math.floor(Math.random() * this.length);
return this[index];
}
let arr = new Array('Seoul', 'New York', 'Tokyo', 'Shanghai');
console.log(arr.random());
Array생성자 함수의 property(프로퍼티)중 prototype(프로토타입)의 메소드로 random을 추가하였다.
유전자 역할의 prototype을 통해 random메소드를 new생성자를 이용해 만든 Array객체와 연결해 상속시켜 주었다.
여기서 random메소드 안의 this는 new생성자를 이용해 만든 Array객체 자체를 가리키게 된다.