최근 "JavaScript에 대한 확실한 가이드(6판)"를 읽었는데 6장 P122에 다음 코드가 있습니다.
// 프로토타입에서 상속된 속성을 반환합니다. object proto 새 객체
//여기에서 ES5 Object.create() 함수를 사용할 수 있습니다
function 상속(proto) {
//proto는 객체이지만 null일 수 없습니다
if( proto == null) throw TypeError();
if(Object.create) return Object.create(proto); //Object.create()가 있으면 사용
var t = typeof proto; 그렇지 않은 경우 추가 확인
if(t!=='object' && t!=='function') throw TypeError();
var F = function() {} // 빈 생성자 정의
F.prototype = proto; // 프로토타입 속성을 proto로 설정
return new F(); // F()를 사용하여 proto의 상속된 객체 생성
도우미 함수의 목적은 분명히 상위 클래스의 프로토타입을 상속하는 새 객체를 생성하는 것입니다
질문
다음 판단은 지금으로서는 이해가 되지 않습니다
var t = typeof proto; 자세히 확인
if(t!=='object' && t!=='function') throw TypeError();
우리 생각에 프로토타입 객체는 객체이거나 직접적인 리터럴이어야 하므로 전달된 매개변수 유형은 "함수" 유형을 갖습니다
이해
함수도 객체이며 고유한 속성과 메서드를 가질 수도 있습니다. 잠깐, 이것은 우리의 정적 속성과 메서드가 아닙니다! 이는 함수를 속성을 추가할 수 있는 객체로 취급하는 것을 의미합니다
// 테스트 통과 함수 유형
var func = function() {};
func.text = '잘했어요';
func.getText = function() {
return func.text;
};
콘솔. log(typeof func); // 'function'
// 함수 유형을 전달하고 func로 프로토타입된 새 객체를 반환합니다.
var subFunc = 상속(func)
console.log(subFunc.getText( )); // 출력: '수고했어요'
알겠습니다. 증거입니다. '함수' 유형을 전달할 수 있는 것으로 나타났습니다