2015-10-28 71 views
1

我很少有類型爲number的變量(或者對於那些字符串)。 我想爲這些變量添加一些元數據。JS:如何定義數值變量的屬性

當我嘗試使用Object.defineProperty(myvar, "prop", {/*getter & setter*/})時,它給出myvar不是對象的錯誤。

如何使用getter和setter方法定義非對象的屬性?

我不想向Number.prototype添加任何東西,因爲我只想在幾個變量上使用這些屬性。

+0

不會將對象轉換成數組,並用數字指標是應對這種通常的方法是什麼? – Filburt

+0

如果確實需要屬性,請使用'Number'和'String'對象來代替原語。不,您不能根據定義*將屬性放在非對象*上。 – Bergi

回答

0

你可以通過原型繼承來做到這一點。 使用Number.prototype這樣的:

var proto = Object.create(Number.prototype); 
function MyNumber() { 
} 
MyNumber.prototype = proto; 
MyNumber.prototype.constructor = MyNumber; 
MyNumber.prototype.someOwnMethod = function() { 
} 
// and so on 
var myVar = new MyNumber(); 
Object.defineProperty(myvar, "prop", {/*getter & setter*/}); 

你會用許多方法相處的原型對象。

或者如果您不需要任何自己的方法,只需使用Number構造函數而不是數字文字。

var myVar = new Number(); 
Object.defineProperty(myvar, "prop", {/*getter & setter*/}); 

同爲字符串:

var myVar = new String(); 
+0

我正在編寫的函數將JSON對象作爲參數,並且此JSON具有不同的基本類型屬性。我想向這些屬性添加元數據而不更改這些屬性的數據類型或向原型添加任何內容。由於沒有辦法將元數據添加到基本類型,現在我在我的方法中創建了一個新的JSON對象,它具有相同的輸入參數結構,但是對於值我使用基本類型的等效對象並返回此新的JSON對象從我的方法。以便輸入對象保持不變。 –