2012-12-25 18 views
9

Powiel możliwe:
Self-references in object literal declarationsJak odwołać właściwości bieżącego obiektu w JS

Mam kilka prostych obiektów w JS jak w poniższym przykładzie:

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

Cóż to prosta rzecz nie działa; john i paul są niezdefiniowani w nazwach, więc próbowałem użyć operatora 'this', który działa TYLKO, gdy wykonuję funkcję (getWholeName(){return this.firstname+this.lastname}). Ale jeśli chcę używać zmiennej, a nie funkcji, jak mam to zrobić? Próbowałem też object.firstname + object.lastname, ale to nie działa.

Odpowiedz

11

Nie ma sposobu, aby odwołać się do obiektu, ale można dodać właściwości dynamiczne:

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

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

EDIT:

A dlaczego nie zawinąć go w funkcji?

+0

Ok, dziękuję. Dlaczego tak robię, staram się mieć dobrze zorganizowany kod w ogromnej aplikacji internetowej, którą buduję; dlatego postanowiłem przegrupować podobne funkcje i zmienne w obiektach takich jak ten. Czy to właściwy sposób na zrobienie tego? Wiem o TypeScript i Modules, ale czy muszę używać TS, aby osiągnąć coś tak prostego, jak grupy funkcji/zmiennych? – Rayjax

+2

@ user1397271 możesz to zrobić w prostym JS: spróbuj wprowadzić przestrzenie nazw (jak var MYAPP = {}; MYAPP.data = ...) i spróbuj podzielić duże funkcje na mniejsze. Rozważ użycie wzorca modułu: http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Dthth – Stefan

+0

kiedy mówisz o przestrzeniach nazw takich jak var MYAPP = {}, oznacza to, że jest taki sam jak mój przykład z var object = {}, więc czy napotkasz problem, o który pytałem? – Rayjax

2

W JavaScript każda funkcja jest obiektem. Należy zadeklarować konstruktor Państwa obiekt jako funkcję tak:

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; 
} 
} 

można dodać dodatkowe metody do obiektu przez prototypowania go aswell, który jest zalecany sposób robienia rzeczy. Więcej informacji:

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

+0

, jeśli wszystko jest funkcja ... co to jest => 'var obj = {1: 1,2: 2}'? – charlietfl

+0

Masz rację, ale każda funkcja jest obiektem. O to mi chodziło. Stoję poprawiony :) – user1574041

+0

Czy po prostu wyrwałeś to z w3schools lub jakiejś innej strony internetowej? – 0x499602D2

Powiązane problemy