← Back to NOTES 🌰 ← Effective JavaScript 🤿

← 아이템 39 - 상위 클래스 프로퍼티 이름을 절대 재사용하지 마라

ECMAScript 표준 library 에 있는 중요 클래스들

Array, Function, Date 등

얘네들은 특별하니까 사속 받아서 뭔가 하지마라.

function Dir(path, entries) { this.path = path; for (var i=0 , n=entries.length; i < n; i++) { this[i] = entries[i]; } }

Dir.prototype = Object.create(Array.prototype); //Array 를 확장

Dir 가 Array 상속받고 path 만 추가.

var dir = new Dir ("/tmp/mysite", ["index.html", "script.js", "style.css"]); dir.length // 0

length 가 0 이 나온다!

이유:

배열에서 length 가 특별하게 동작하기 때문.

ECMAScript 표준에서 보이지 않는 내부 프로퍼티 [[Class]]로 명시. 일종의 태그 같은거.

Array 는 [[Class]] 값이 “Array”

Function 은 [[Class]] 값이 “Function”

Object.prototype.toString() 하면 나오는게 이 [[Class]] 의 정의.

length 는 [[Class]]가 “Array” 일때, 특별하게 동작하게 돼있음.

늘어나고 줄어들고

근데 Array 클래스를 확장하면 new Array() 로 생성하지 않고, Dir는 [[Class]] 가 “Object” 가 됨.