2012-11-19 7 views
0

에서 작동하지 않는 다음 프로그램을 인쇄저장 document.write를 자바 스크립트

var print = function(t){ 
    document.write(t); 
}; 

var printAlias = print; 

printAlias("Hello world"); 

을 예상하지만 document.write를 가진 동일한 기술을 사용하면 작동하지 않는 "안녕 세계".

var write = document.write ; 
write("Something); 

아무도 내가 누락 된 부분을 말해 줄 수 있습니까?

답변

2

write 방법 내에서 컨텍스트 ("this 값")를 잃어 버렸기 때문에 작동하지 않습니다. 당신의 방법으로 write를 호출하기 때문에 당신이 단순히 다른 함수에서 document.write에 대한 호출을 래핑 첫 번째 예에서

write.call(document, "Something"); 

을하지만, 호출 자체는 컨텍스트를 유지한다 : 당신은 그것을 다시 얻을 수있는 call methodwrite를 호출 할 수 있습니다 document.

당신이 목표로했던 짧은 코드라면 일반 또는 래퍼 기능을 사용할 수 있습니다! 또는 (감사 @Esailija) 당신은 당신이 당신의 write 변수 생성시 document에 컨텍스트를 bind 수 :

var write = document.write.bind(document); 
+0

을 그는 수도뿐만 아니라'var에 쓰기 = document.write.bind (문서)'이후'write.call '어쨌든 이전 IE에서는 지원되지 않습니다. – Esailija

+0

@Esailija - 맞습니다. 이전 IE에서 지원되지 않는다는 것을 몰랐습니다. 어떤 버전이 수정 되었습니까? –

+0

따라서 write 메소드는 "this"를 문서의 내부에 사용하고 "this"가 문서가 될 것으로 기대합니다. 내가 맞습니까? – Tanmoy

관련 문제