2012-09-04 2 views
14

루비에, 당신은이 작업을 수행 할 수 있습니다JavaScript로 인해 숫자에 대한 메서드를 직접 호출 할 수없는 이유는 무엇입니까?

3.times { print "Ho! " } # => Ho! Ho! Ho! 

내가 자바 스크립트에서 그것을 시도 :

Number.prototype.times = function(fn) { 
    for (var i = 0; i < this; i++) { 
     fn(); 
    } 
} 

을이 작동 :

(3).times(function() { console.log("hi"); }); 

3.times(function() { console.log("hi"); }); 
을하지 않습니다

크롬 제공 구문 오류입니다 : "예기치 않은 토큰 불법". 왜?

+1

... JavaScript가 Ruby가 아니기 때문에? 그것은 "왜 루비처럼 작동하지 않는가?"라고 묻는 것과 같습니다. – Incognito

+6

@Incognito 음, 아니요? 왜 구문 오류가 아닌지 물어보고 있는데 왜 루비처럼 작동하지 않습니다 ... –

+1

첫 번째 장소에서 루비에 대해 이야기하고 그 진술과의 일관성을 유지하는 이유에 대해 설명 할 수 있습니까? – Incognito

답변

35

숫자 뒤의 숫자는 숫자의 소수점을 나타내며, 다른 하나는 속성이나 메서드에 액세스해야합니다.

3..times(function() { console.log("hi"); }); 

이것은 십진 리터럴에만 필요합니다. 8 진수 및 16 진수 리터럴의 경우 . 하나만 사용하십시오.

03.times(function() { console.log("hi"); });//octal 
0x3.times(function() { console.log("hi"); });//hexadecimal 

또한 지수

3e0.times(function() { console.log("hi"); }); 

숫자에 공백이 유효하고 모호함이 없기 때문에 당신은 또한 공간을 사용할 수 있습니다.

3 .times(function() { console.log("hi"); }); 

코멘트에 wxactly에 의해 명시된 바와 같이 minifier 위의 구문 오류를 일으키는 공간을 제거하는 것이지만.

+0

Ah, thanks. Ruby에서 소수점을 나타낼 수도 있지만 여전히 작동한다는 점이 흥미 롭습니다. –

+5

나는 독자에게 혼란을 일으킬 가능성이 매우 높기 때문에 2 도트를하는 것에 반대한다. parantheses는 자기 설명력이 있습니다. –

+3

@AlexCoplan Ruby에는 정수 및 부동 소수점 유형이 있기 때문에 추측하겠습니다 만 JavaScript에는 숫자가 있습니다. – Musa

관련 문제