2011-04-25 38 views
0

爲了使它更通用的...我的轉變Number對象的原型在Javascript做這個爲什麼2.ceil()拋出異常,而2.3.ceil()在prototype.js中返回3?

Number.prototype.ceil = function() { return Math.ceil(this); }; 

現在2.3.ceil()返回3和2.ceil()拋出異常。 但是,如果我做b = 2,然後做b.ceil(),它工作正常!所以,基本上它仍然是一個JavaScript問題。

+1

AFAIK,這不是JavaScript中,除非你正在做一些時髦與原型。如果我想'ceil'一些我願意做:'Math.Ceil(X)' – spender 2011-04-25 15:28:35

+0

是的,你是對的...這是我的錯誤。 – 2011-04-25 15:33:03

+1

@Narendra ... ceil()是**不是** Number對象的內置函數。您必須使用第三方庫,將這種功能添加到數字類型中。我懷疑你正在使用'prototype.js'。讓我們知道。 – spender 2011-04-25 15:34:26

回答

3

的方法是Math.ceil,它不是一個實例方法。

var b = 2; 
console.log(Math.ceil(b)); 

b = 2.3; 
console.log(Math.ceil(b)); 

看起來這將是微不足道的創建原型方法可以做到這一點:

Number.prototype.ceil = function() { 
    return Math.ceil(this); 
}; 

console.log(2.3.ceil()); 

它也像JavaScript的保留在數字文本第一位小數添加小數的號碼。這是一種語言功能。爲了解決這個問題,你需要兩個小數:

2.ceil(); // does not work 
2.3.ceil(); // does work 
2..ceil(); // does work 
+0

我懷疑OP在原型上做了些奇怪的事情。實際上Prototype.js提供了這個功能:http://www.prototypejs.org/api/number/ceil爲什麼他們會這樣做?這既困惑又毫無意義。 – spender 2011-04-25 15:31:03

+1

可能是,但問題應該已被正確標記;) – Eli 2011-04-25 15:32:04

+0

@Eli ....確實 – spender 2011-04-25 15:33:11

0

2.ceil()看起來像它會是一個語法錯誤。 (解釋者可能會對這個點感到困惑 - 它會嘗試將點解釋爲數字的一部分。)

看看2..ceil()(注意雙點)或(2).ceil()適合你。

+0

Nope(2).ceil()也不起作用。順便說一句我正在使用鉻控制檯來檢查這一點。但2.3.ceil()按預期返回3。 – 2011-04-25 15:31:53

+0

@Downvoter:你可能不喜歡'ceil'是一個實例方法,但在他的情況下,它是(或'2.3.ceil()'也會失敗)。 – cHao 2011-04-25 15:33:25

+0

@Narendra:你確定嗎?嘗試2.4.ceil()並查看它是否返回3或4. – 2011-04-25 15:33:58

0

你不應該能夠做任何的是,除非你有某種框架或什麼是原型.ceil()的方法,在這種情況下,它可能將其原型化爲字符串方法。 IOW .ceil()不是原生的JavaScript方法。

JavaScript的原生「全面上漲」的方法.ceil()的工作原理是利用數學對象就像

alert(Math.ceil(2.3)); 
+0

請參閱http://www.prototypejs.org/api/number/ceil。至少有一個流行的框架做到這一點。 – cHao 2011-04-25 15:48:23

+0

但是在做這個之後還是有這個bug的行爲Number.prototype.ceil = function(){return Math.ceil(this); };現在2.3.ceil()返回3,2.ceil()拋出異常。但如果我做b = 2,然後做b.ceil(),它工作正常!所以,基本上它仍然是一個JavaScript問題。 – 2011-04-25 16:31:47

相關問題