2017-01-23 4 views
0

Wenn ich den String-Konstruktor verwende ich frage mich immer, wie es gemacht wird. Es gibt die Zeichenfolge, die Sie als Parameter angegeben, obwohl es mit dem "neuen" Operator wie eingerichtet ist :Konstruktor Funktion Rückkehr ist anders als "[Object object]"

var str = new String("Hello World") 
    //str == "Hello World" 

Wenn ich einen Konstruktor machen und ich es ein Rückgabewert geben ihm ein Objekt zurückgibt, wenn instanziiert:

function CreateString(st) { 
    return ''+st 
    } 
    var MyString = new CreateString("Hello there!") 
    //MyString == "[Object object]" 

Wie kann ich einen Konstruktor erstellen, die einen anderen Wert als [Object-Objekt] liefert ?

Update: Ich versuche, einen Konstruktor Funktion zu erstellen, die beide Eigenschaften und Wert sich wie hat:

function MyConstructor() { 
    this.myMethod = function() { 
    return 73 
    } 
    return 25 
    } 
    /*I want MyConstructor to have the value 25 and the myMethod method */ 
    alert(MyConstructor()) // to be 25 
    alert(MyConstructor().myMethod()) //to be 73 
+0

Es gibt sehr, sehr wenige Gründe String-Instanzen zu erstellen. – Pointy

+0

Was versuchst du zu tun? Erstellen Sie eine neue "Klasse" oder erstellen Sie einfach etwas anderes als ein Objekt? – Shilly

Antwort

1

Sie können toString() Funktionsdefinition in der gewünschten Klasse ersetzen.

function CreateString() { 
    function toString() { return 'foo' } 
} 

Beispiel: Number.prototype.toString()

+0

Ja. das funktioniert. aber der Konstruktor selbst gibt immer das Objekt zurück –

+0

@MichaelRitter siehe http://StackOverflow.com/a/6307570/2013580 und http://StackOverflow.com/Questions/332422 – zurfyx

+0

Was sollen diese Links mir zeigen? Nur weil eine Klasse über eine toString-Methode verfügt, gibt der Konstruktor immer noch eine Klasseninstanz zurück, nicht den Wert des toString() -Aufrufs (es sei denn, Sie drucken ihn und rufen dort automatisch .toString() auf). –

0

Durch diese Linie

var MyString = new CreateString("Hello there!") 

Sie einfach nicht funktionieren CreateString aufrufen, sind Sie ein neues Objekt der 'Typ' Erstellen CreateString (eine Instanz eines Funktion).

Ich denke, was Sie wollen, ist nur

var MyString = CreateString("Hello there!") 
Verwandte Themen