← 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” 가 됨.