From 002993a04239275fa9c63b8d46bfc141f5f43b68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=B5=E1=84=8C=E1=85=A2=E1=84=92=E1=85=A1?= Date: Sun, 25 Jun 2023 16:37:14 +0900 Subject: [PATCH] =?UTF-8?q?EDIT:=206-2=20=EB=82=B4=EC=9A=A9=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ch06/6-2.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/ch06/6-2.md b/ch06/6-2.md index 8ab0071..fa384e0 100644 --- a/ch06/6-2.md +++ b/ch06/6-2.md @@ -61,3 +61,38 @@ var 어레이 = [4, 2, 1]; 프로토타입 체인에서 가장 먼저 찾은 함수가 호출되기 때문에, 인스턴스에서 정의한 함수가 호출된다. 클래스 기반 언어에서는 상속을 사용하지만, 자바스크립트와 같은 프로토타입 기반 언어에서는 객체를 원형(prototype)으로 삼고 이를 복제함으로써 상속과 비슷한 효과를 얻는다. + +```js +var 어레이 = [4, 2, 1]; +어레이(.__proto__).push(3); +어레이(.__proto__)(.__proto__).hasOwnProperty(2); // true +``` + +proto 는 생략할 수 있으므로 프로토타입 체이닝에 의해 배열 인스턴스에서도 Object의 prototype 메서드를 사용할 수 있다. + +```js +var Grade = function () { + var args = Array.prototype.slice.call(arguments); + for (var i = 0; i < args.length; i++) { + this[i] = args[i]; + } + this.length = args.length; +}; + +var g = new Grade(100, 80); +``` + +Grade의 인스턴스 g 는 유사배열객체이다. + +g { 0: 100, 1: 80, length: 2 } + +따라서 배열 메서드를 사용할 수 없다. + +이를 가능하게 하고 싶다면, 인스턴스 g의 proto, 즉 Grade.prototype 이 배열의 인스턴스를 바라보게 해주면 된다. + +```js +Grade.prototype = []; + +g.pop(); +g.push(90); +```