2012-12-25 11 views
9

Mögliche Duplizieren:
Self-references in object literal declarationsWie Eigenschaften des aktuellen Objekts in JS referenzieren

Ich habe einige einfache Objekte in JS wie in diesem Beispiel:

var object = { 
firstname : 'john', 
lastname : 'paul', 
wholename : firstname + lastname 
} 

Gut, das einfache Sache funktioniert nicht; John und Paul sind im ganzen Namen nicht definiert, also habe ich versucht, den 'this' Operator zu benutzen, der NUR arbeitet, wenn ich eine Funktion (getWholeName(){return this.firstname+this.lastname}) mache. Aber wenn ich eine Variable und nicht eine Funktion verwenden möchte, wie kann ich tun? Ich habe auch versucht object.firstname + object.lastname, aber es funktioniert nicht.

Antwort

11

Es gibt keine Möglichkeit, das Objekt zu verweisen, aber Sie die Eigenschaften dynamisch hinzufügen:

var object = { 
    firstname : 'john', 
    lastname : 'paul' 
}; 

object.wholename = object.firstname + object.lastname; 

EDIT:

Und warum nicht wickeln Sie es in einer Funktion?

var makePerson = function (firstname, lastname) { 
    return { 
     firstname: firstname, 
     lastname: lastname, 
     wholename: firstname + lastname // refers to the parameters 
    }; 
}; 

var object = makePerson('john', 'paul'); 
+0

Ok danke. Der Grund dafür ist, dass ich versuche, in einer riesigen Web-App, die ich erstelle, einen gut organisierten Code zu haben; und so beschloss ich, ähnliche Funktionen und Variablen in solchen Objekten neu zu gruppieren. Ist das der richtige Weg? Ich weiß über TypeScript und Module, aber muss ich TS verwenden, um etwas so einfaches wie Gruppen von Funktionen/Variablen zu erreichen? – Rayjax

+2

@ user1397271 Sie können dies in plain JS tun: versuchen Sie Namespaces (wie var MYAPP = {}; MYAPP.data = ...) einzuführen und versuchen Sie, große Funktionen in kleinere zu zerlegen. Ziehen Sie das Modulmuster in Betracht: http://www.acreatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth – Stefan

+0

Wenn Sie Namespaces wie var MYAPP = {} sagen, bedeutet dies, dass es dasselbe wie in meinem Beispiel ist mit var object = {}, werde ich also auf das Problem stoßen, nach dem ich gefragt habe? – Rayjax

2

In Javascript ist jede Funktion ein Objekt. Sie sollten Ihr Objekt Konstruktor als Funktion wie folgt erklären:

function person(firstname,lastname) 
{ 
this.firstname=firstname; 
this.lastname=lastname; 

this.wholeName=wholeName; 

//this will work but is not recommended. 
function wholeName() 
{ 
return this.firstname+this.lastname; 
} 
} 

Sie es zusätzliche Methoden, um Ihr Objekt hinzufügen können aswell von Prototypen, die der empfohlene Weg ist, Dinge zu tun. Mehr Infos hier:

http://www.javascriptkit.com/javatutors/proto.shtml

+0

, wenn alles ist eine funktion ... was ist das => 'var obj = {1: 1,2: 2}'? – charlietfl

+0

Sie haben Recht, aber jede Funktion ist ein Objekt. Das ist es was ich meinte. Ich stehe behoben :) – user1574041

+0

Hast du das gerade von w3schools oder einer anderen Website abgerissen? – 0x499602D2

Verwandte Themen