Louzhu의 이해력과 실무 능력이 아직 성숙하지 않았을 때, 이 기사에서 그는 Li Zhan 선생님의 많은 내용을 복사하여 자신의 블로그에 "지식 저장소"로 썼습니다. 이번에는 여전히 불가피합니다. 5장으로 돌아섰을 때, 그 장의 두 번째 문단인 "함수는 객체의 모든 특성을 갖고 있다. 함수를 객체라고 부를 수 있다. 사실 함수는 객체이지만 일반적인 것과는 다르다"는 문구에 깊은 매력과 감동을 받았다. 함수의 논리를 실행하는 데 사용되는 추가 대괄호 "{}" 연산자가 있습니다. 즉, 함수 자체는 호출할 수 있지만 일반 객체는 완전히 동일하다는 점을 제외하면 호출할 수 없습니다. 몇 마디이지만 객체와 기능 간의 관계에 대한 심오한 설명입니다. 아래에서 Lou Zhu는 자신이 작성한 몇 가지 간단한 코드를 통해 JavaScript에 내장된 객체와 함수 사이의 관계를 보여줍니다.
1. 함수는 객체, 객체는 함수
alert(Function instanceof Object); // true
alert(Object instanceof Function) // true
보시다시피 Instanceof 연산자에서 함수는 객체이고 객체는 함수입니다.
2. 1이 true이므로 Object가 Function에 의해 확장된 프로토타입 메서드를 "가져올" 수 있습니까?
alert(Object.funcMethod) ; // 정의되지 않음
Function.prototype.funcMethod = function() {
/*여기에 일부 함수 메서드 코드가 있습니다*/
}
alert(Function.funcMethod)
alert(Object. funcMethod);
alert(Function.funcMethod === Object.funcMethod); //true
맞습니다. Function을 위해 확장한 프로토타입 메소드인 funcMethod는 마법 같은 결과를 얻었습니다. "공짜로 뭔가를 얻으세요" .
3. 1과 2가 모두 참이므로 Function이 Object 확장의 프로토타입 메소드를 "가져올" 수 있습니까? !
코드
alert( Function.objMethod ); // 정의되지 않음
Object.prototype.objMethod = function() {
/*여기에 일부 개체 메서드 코드가 있습니다*/
}
alert(Object.objMethod)
Alert(Function .objMethod);
alert(Function.objMethod === Object.objMethod); //true 또는 false?
위의 코드 팝업이 참인가요, 아니면 거짓인가요? 직설적으로 말하면 기사 전반에 걸친 Lou Zhu의 간단명료한 진술을 토대로 여러분은 이미 결과를 알고 계실 것이므로 여기서는 답변을 발표하지 않겠습니다.
마지막으로 Rong Louzhu는 여기에서 자기애적임을 자랑스럽게 생각합니다. 저는 개인적으로 위의 세 가지 코드가 "함수는 객체의 본질"을 확인하는 원본 책의 코드보다 더 설득력이 있어야 한다고 생각합니다.