2012-11-06 3 views
4

나는 다음과 같은 코드자바 스크립트 적용시 직접 호출과 다른 결과가 나타나는 이유는 무엇입니까?

var d = new Date(); 
Object.prototype.toString(d); //outputs "[object Object]" 
Object.prototype.toString.apply(d); //outputs "[object Date]" 

가 왜 이런 차이와 무슨 일이?

편집 :

그래서의 날짜 않는 곳 "[객체 날짜]"에서 유래에서
d.toString() // outputs "Tue Nov 06 2012 ..." 

. 트릭을 수행하는 브라우저의 기본 코드입니까?

답변

4
Object.prototype.toString(d); 

Object.prototype을 문자열로 변환하고 인수를 무시합니다.

에서
Object.prototype.ToString.apply(d); 

d은 어떤 방법의 측면이다 ToString 방법 (Object.prototype.toString를 참조 toStringd.toString()가 호출 된 경우 등)에 this로 전달됩니다.

Function#applyObject#toString

+0

하지만 d.toString()은 완전히 다른 결과를 제공합니다. 권리? – suhair

+0

그렇습니다.이 경우 ['Date.prototype.toString'] (http://ecma-international.org/ecma-262/5.1/#sec-15.9.5.2)를 호출하지 않기 때문에 [Object.prototype.toString ] (http://ecma-international.org/ecma-262/5.1/#sec-15.2.4.2) (즉, Date 인스턴스는 다른'toString' 메소드를 상속받습니다). – RobG

3

매개 변수는 첫 번째 호출에서 무시를 참조하십시오. 당신은 기본적으로 동일의 Object.prototype 개체에 toString 방법을 요구하고있다 : 두 번째에서

{}.toString(); //outputs "[object Object]" 

Object에 대한 toString 메소드를 호출하지만 문맥으로 Date 객체를 적용하고 호출합니다. 이 메소드는 객체의 유형을 문자열로 반환합니다. 대신 Date 객체의 값을 문자열로 반환하는 Date 객체의 toString 메소드를 비교합니다.

1

또 다른 설명은 Object.prototype.toStringthis 개체에서 작동한다는 것입니다. 함수의 this은 당신이 할 때 당신이 그렇게 호출 방법에 의해 설정됩니다

Object.prototype.toString(); 

toString 함수의 thisObject.prototype 개체입니다. 당신이로 호출 할 때 :

Object.prototype.toString.apply(d); 

thisd (Date 객체)가 참조하는 객체입니다.

관련 문제