2013-03-26 75 views
0

它是否正在創建Number函數的新版本並將其稱爲其他內容?有沒有更好的方式來寫這個?這個原型是做什麼的?

Number.prototype.clamp = function(min, max) { 
    return Math.min(Math.max(this, min), max); 
}; 

是不是一樣

Number.prototype.NumberToMystring = function(n) { 
    return n.toSTring(); 
}; 

然後NumberToMystring(5)將返回 「5」,但作爲一個字符串

+0

已更新爲使用說明。 – karthick 2013-03-26 07:56:54

+0

'NumberToMystring()'函數沒有任何意義。它是所有Number對象的一種方法,但它*忽略了它被調用的數字。例如,你可以用'(10).NumberToMystring(20)'來調用它,並且函數根本不會對被調用的'10'做任何事情。這跟你調用'(20).toString()'一樣。 – 2013-03-26 08:00:31

+0

這聽起來像你可能會猜測這個'.prototype.'業務是關於什麼的,是的?在這種情況下,最好的方法是閱讀它們:https://www.google.com/search?q=javascript+prototype – 2013-03-26 08:03:07

回答

1

沒有NumberToMystring是不一樣的夾子。

夾具有不同的目的,所以是NumberToMystring。 Clamp確保該數字在一個範圍內,而後者是一個轉換操作員。鉗

用法

var x = (5).clamp(0, 255); return 5 


Number.prototype.clamp = function(min, max) { 
    return Math.min(Math.max(this, min), max); 
}; 

如果你看到這個原型。你將在return語句中有一個這個對象。這只不過是你在我們的案例中稱爲夾的數字,它是5.

要理解爲什麼它發生這樣的事情,你必須理解大量的概念,從執行上下文,範圍開始,然後訪問原型。

嘗試改變這樣的鉗位功能,看看它返回。這將幫助你理解爲什麼你的JS小提琴代碼不起作用。

Number.prototype.newclamp = function(min, max) { 
    return this; 
}; 

這將返回Number對象。如果您在此調用過程分析範圍鏈,那麼你會發現在其範圍5時進行

var y = 5; 
var z; 

z = y.newclamp(); 
z.toString() // return 5; 


Number.prototype.NumberToMystring = function(n) { 
    return n.toSTring(); 
}; 

在這個特殊的原型任何操作。因此5將被退回,您只使用傳遞時的說法你稱之爲原型。這就是爲什麼NumberToMystring(5)返回「5」以5作爲參數

對於理解原型,作用域鏈和執行上下文看看這個網站。 http://dmitrysoshnikov.com/ecmascript/chapter-3-this/

+0

您可以將其他答案添加到plesae – 2013-03-26 07:50:43

+0

以及我如何調用鉗夾我試過var x = Number.clamp(10);但我得到一個錯誤 – 2013-03-26 07:52:03

+0

@ Hello-World:你必須傳遞兩個參數來鉗位。 var x =(5).clamp(0,255);返回5 – karthick 2013-03-26 07:52:53

0

在JavaScript中的所有對象從Object對象的後裔;所有對象繼承Object.prototype中的Object.prototype方法
和特性,儘管它們可能被覆蓋 (除了用空原型,即的Object.create(空)的Object)。例如,其他
建設者的原型覆蓋constructor屬性,並提供自己的toString
方法。對象原型對象的更改會傳播到所有對象,除非這些更改的屬性和方法在原型鏈中被進一步覆蓋。

SEE HERE

+0

OP不使用'Object.prototype' – Bergi 2013-03-26 08:16:40