2012-04-13 8 views
0

여기에 Is there a JavaScript equivalent of rubys "#{}" sequences?이라는 질문에 대답했습니다. 자바 스크립트 프로토 타입에 문제가 생겼습니다. 루비 방식으로 문자열을 인쇄, 서식 지정 및 연결하는 첫 번째 작업 함수의 대체 방법을 제공하고자했습니다. 정상적인 기능이 작동하고 프로토 타입 기능이 작동하지 않는 이유는 무엇입니까?프로토 타입 함수가 결과 대신 자체를 인쇄합니다.

<script> 
function p(str){ 
    document.write(str.replace(/#{(\w)}/g, function(match, s){return eval(s)})+"<br>"); 
} 

String.prototype.p = function() { 
    return this.replace(/#{(\w)}/g, function(match, s){return eval(s)})+"<br>"; 
}; 


var f="foo", b="bar" 
p("#{f} #{b}") 
document.write("#{f} #{b}".p); 

</script> 

+0

여기에 평가판을 피하는 방법을 알고있는 사람이 있습니까? 물론 – peter

답변

2

"#{f} #{b}".p는 의미 .. 첫번째 행이 올바른지

foo bar 
function() { return this.replace(/#{(\w)}/g, function(match, s){return eval(s)})+" 
"; } 

는 그것이 연결된 문자열, 두번째 줄은 인쇄 기능 자체가 아닌 결과이다 준다 "# {f} # {b}"이 (가) 문자열이기 때문에 함수 자체 (String.p)에 전달해야합니다.

foo bar를 인쇄하려면 "#{f} #{b}".p()을 입력해야합니다.

+0

! 나 바보, 나는 이미 너무 루비에 익숙해. 나는 추측한다, 고마워. – peter