나는 이전 답변에 대해 너무 은유적이고 비밀 스럽습니다. 설명은 다음과 같습니다.
Array, Boolean, Date, Function, Number, RegExp, String의 인스턴스는 Object이지만 각 유형에 특정한 메서드와 속성으로 향상되었습니다. 예를 들어, 배열에는 미리 정의 된 length
속성이 있지만 일반 객체에는 없습니다.
javascript:alert([].length+'\n'+{}.length)
디스플레이
0
찾으시는 주소가 없습니다
본질적으로 FF Gecko 인터프리터는 언어 구성을 평가하는 뚜렷한 차이점을 가지고 배열과 일반 객체를 구별합니다.
javascript:
ra=[ "one", "two", "three"]; ra.a=4;
ob={0:"one", 1:"two", 2:"three"}; ob.a=4;
alert(
ra +"\n\n"+
ob +"\n\n"+
ra.toSource() +"\n\n"+
ra.a +"\t .toSource() forgot me! \n\n"+
ra.length +"\t and my length! \n\n"+
ob.toSource());
ps=""; for(i in ra)ps+=i+" "; alert(ps); /* NB .length is missing! */
ps=""; for(i in ob)ps+=i+" "; alert(ps);
표시
하나 둘 셋
[객체 객체]
["하나 둘 셋"]
4 .toSource ()가 나를 잊었습니다!
3 그리고 내 길이!
({0 : "one", 1 : "two", 2 : "three", a : 4})
및 0 1 2 a
및 0 1 2 a
.
모든 객체가 함수라는 진술과 관련하여 :
이것은 어느 구문이나 의미처럼 정확한 함수로서 임의의 객체 인스턴스를 사용하는 것 123()
또는 "abc"()
또는 []()
또는 {}()
또는 obj()
여기서 obj
이외의 타입이 Function
임의의 객체 인스턴스가되지 않도록, Function
. 그러나, 객체 부여 obj
하고 그것의 유형은 Array, Boolean, Date, ...
어떻게 않았다 obj
로로 올 Array, Boolean, Date, ...
? 무엇입니까 Array, Boolean, Date, ...
?
javascript:
alert([Array, Boolean, Date, Function,
Number, Object, RegExp, String] . join('\n\n') );
디스플레이
function Array() {
[native code]
}
function Boolean() {
[native code]
}
function Date() {
[native code]
}
function Function() {
[native code]
}
function Number() {
[native code]
}
function Object() {
[native code]
}
function RegExp() {
[native code]
}
function String() {
[native code]
}
모든 경우에 모호하지 않고 객체 유형은 function
정의 로 나타나 므로 모든 객체가 함수라는 진술입니다! (혀로 뺨을 치는 것은 내가 의도적으로 객체 인스턴스의 구분을 해당 유형의 구분으로 모호하게 숨기고 흐리게했다는 것입니다. 그래도 이것은 "다른 하나 없이는 가질 수 없습니다"를 보여줍니다. 객체 및 함수! 대문자는 다음과 같이 유형을 강조합니다. 인스턴스에 반대.)
두 기능 및 객체 패러다임은 낮은 수준의 통역 프로그래밍의 기초와 JS의 구현 것 같다 내장 프리미티브, 같은 Math
과 JSON
과 true
.
javascript:alert([Math, JSON, true.toSource()].join("\n\n"));
디스플레이
[object Math]
[object JSON]
(new Boolean(true))
자바 스크립트를 개발할 때 객체 중심 프로그래밍 스타일 (OOP-객체 지향 프로그래밍 스타일- " 's"는 내 말장난입니다!)이 유행했고 인터프리터는 더 큰 신뢰성을 제공하기 위해 Java로 비슷한 이름을 붙였습니다. . 함수형 프로그래밍 기술은 Automata, Recursive Functions, Formal Languages 등의 이론을 연구하는 좀 더 추상적이고 난해한 시험으로 강등되었으며 그다지 맛이 좋지 않았습니다. 그러나 이러한 공식적인 고려 사항의 강점은 특히 FF의 Gecko 엔진 (예 :)에 구현 된 Javascript에서 명확하게 나타납니다 .toSource()
.
함수에 대한 객체 정의는 반복 관계로 정의되어 특히 만족 스럽습니다! 자체 정의를 사용하여 정의!
function Function() { [native code] }
그리고 함수는 객체이기 때문에
function Object() { [native code] }
.
대부분의 다른 정의는 정적 터미널 값으로 중지됩니다. 그러나 eval()
는 특히 강력한 기본 요소이므로 String은 임의의 기능을 포함 할 수도 있습니다.
위에서 사용 된 언어는 객체 유형과 인스턴스 구분을 모호하게합니다.