2017-02-19 2 views
0

Ich muss ein neues Objekt in Javascript erstellen, die einen Zahlenwert zurückgeben sollte. Was ich erwarte, ist:Javascript - Erstellen Sie ein neues Objekt, das primitiven Datentyp Mime

var Currency = function(args) { 
 
    return args*Currency.prototype.multiple; 
 
} 
 

 
Currency.prototype.multiple = 1000; 
 
Currency.prototype.Locale='en-IN'; 
 
Currency.prototype.currency= 'INR'; 
 
Currency.prototype.paise = function(){ 
 
    return (Currency.prototype.args*Currency.prototype.multiple); 
 
}; 
 
Currency.prototype.show = function(){ 
 
    return (this.valueOf()/Currency.prototype.multiple).toLocaleString(Currency.prototype.Locale, { style: 'currency', currency: Currency.prototype.currency }); 
 
}; 
 

 
var num = new Currency(5); 
 
console.log(num) //5000

Aber was habe ich ein Objekt

currency{} 

Wie mein gewünschtes Ergebnis erreichen?

+0

Bitte mehr Kontext zu machen. Was genau versuchst du zu tun? –

+1

Ihr Code ist irgendwie seltsam, Sie können das Erstellen eines Objekts vermeiden, wenn Sie das Schlüsselwort 'new' weglassen. Rufen Sie 'Currency' einfach wie eine normale Funktion auf. – Scarysize

+0

@FelixKling Ich versuche einen neuen Datentyp 'Währung' zu erstellen, der seine eigenen Eigenschaften hat. Währung ist immer eine Zahl, aber sie sollte mit 1000 multipliziert werden. Ich möchte nicht auf den Wert der Funktion mit obj.value zugreifen. Stattdessen möchte ich auf seinen Wert durch einfaches obj zugreifen (wie primitive Datentypen) – Avinash

Antwort

0

Wenn Sie eine Instanz mit new erstellen, wird automatisch das neu erstellte Objekt aus dem Konstruktor zurückgegeben. Es wird nicht empfohlen, sie außer Kraft zu setzen, wenn Sie sich nicht sicher sind. Beachten Sie auch, dass, wenn Sie ein Nicht-Objekt wie eine Zahl zurückgeben, es das überschreiben und nur das neu erstellte Objekt zurückgeben wird. Wenn Sie dies überschreiben möchten, müssen Sie ein Objekt selbst zurückgeben, z. B. return {value: args*Currency.prototype.multiple}, aber Sie müssen Ihre Logik hinzufügen, um den Verweis auf Ihr neu erstelltes Objekt für spätere Verwendung beizubehalten, z. B. Zugriff auf currency.

In Ihrem Fall können Sie nur noch eine value für jede Währung und legen Sie es in Konstruktor, die Sie mit myObject.value

späteren Zugriff kann es als Zahl zu verwenden, wenn es die Verwendung als Nummer fordert Sie können valueOf @Xufox erwähnt

dem vorhergehenden Code (valueOf) an Ort und Stelle, zu jeder Zeit ein Objekt vom Typ myNumberType in einem Kontext verwendet wird, wo es als Grundwert repräsentiert werden, ruft automatisch die JavaScript-Funktion definiert im vorhergehenden Code.

var num = new Currency(5); 
console.log(num+100 + num.currency);//5100INR 

var Currency = function(args) { 
 
    this.value = args*Currency.prototype.multiple; 
 
} 
 

 
Currency.prototype.multiple = 1000; 
 
Currency.prototype.Locale='en-IN'; 
 
Currency.prototype.currency= 'INR'; 
 
Currency.prototype.paise = function(){ 
 
    return (Currency.prototype.args*Currency.prototype.multiple); 
 
}; 
 
Currency.prototype.show = function(){ 
 
    return (this.valueOf()/Currency.prototype.multiple).toLocaleString(Currency.prototype.Locale, { style: 'currency', currency: Currency.prototype.currency }); 
 
}; 
 

 
Currency.prototype.valueOf = function(){ 
 
    return this.value; 
 
} 
 

 
var num = new Currency(5); 
 
console.log(num.value + num.currency) //5000 
 
console.log(num+100 + num.currency); 
 
var num2 = new Currency(50); 
 
console.log(num2.value + num2.currency) //5000

+0

Danke :) Ich möchte, dass sich das Objekt als nativer Datentyp verhält. h., anstelle von 'num.value', um auf meinen Wert zuzugreifen, möchte 'num' selbst meine Daten speichern (wie primitive Datentypen). – Avinash

+1

@Avinash Sie können eine "valueOf" -Funktionseigenschaft für den 'Prototyp' definieren, der den Wert zurückgibt. 'num' ist dann immer noch ein Objekt, aber Sie können es als Zahl verwenden. – Xufox

+0

@Xufox Das ist eine gute Idee :) – sabithpocker

Verwandte Themen