2016-04-18 4 views
-1

In einem "Basis" -Objekt ist es einfach, eine "Get" -Eigenschaft zu definieren.JS verwenden get in Konstruktor

var anObject = { 
 
    get aProperty() { 
 
    return "abc"; 
 
    } 
 
} 
 
document.write(anObject.aProperty); //abc

Ich finde eine Lösung, die eine bekommen Eigenschaft in einer Konstruktor Funktion hinzuzufügen.

var BasicConstructor = function() 
 
{ 
 
    Object.defineProperty(this, "aProperty", {get : function(){ return "abc"; }}); 
 
} 
 
var anOtherObject = new BasicConstructor(); 
 

 
document.write(anOtherObject.aProperty); //abc

Ist sie eine einfachere und lesbare Lösung? Ich versuche eine Lösung wie die folgende ohne Erfolg.

var BasicConstructor = function() 
 
{ 
 
    this.aProperty = get() 
 
    { 
 
     return "abc"; 
 
    } 
 
} 
 
var anOtherObject = new BasicConstructor(); 
 

 
document.write(anOtherObject.aProperty); //abc

+1

ich will nur um darauf hinzuweisen, dass 'aProperty()' eine "neue" Notation ist. 'Object.defineProperty' ist das" alte ", was bedeutet, dass es von Browsern mehr unterstützt wird. –

+0

@NiettheDarkAbsol: Es gibt nichts Neues an dieser Notation. FF unterstützt es seit 10 Jahren jetzt :-) – Bergi

+0

@NiettheDarkAbsol Sis ('here eineEigenschaft()') da von ES5 –

Antwort

0

Da Ihre Frage ist getaggt mit

Sie können nur es6 Klasse Syntax und einen Getter verwenden:

class BasicConstructor { 
    get aProperty() { return 'abc'; } 
}; 
var anOtherObject = new BasicConstructor(); 

document.write(anOtherObject.aProperty); //abc 
+0

Sie hätten das in ES5 auch mit' BasicConstructor.prototype = {get aProperty() {...}}; 'bekommen können , aber es ist in beiden Fällen nicht im Konstruktor. – Bergi

+0

Das ist wahr @Bergi – Neal

+0

Schöne Lösung, danke –

-1

this.aproperty = get() {} ist ungültige Syntax. Sie müssen die „Funktion“ Schlüsselwort (und Sie nicht wirklich die überhaupt bekommen müssen, aber Sie können es halten, wenn Sie wollen)

var BasicConstructor = function() 
 
{ 
 
    this.aProperty = function get() 
 
    { 
 
     return "abc"; 
 
    } 
 
} 
 
var anOtherObject = new BasicConstructor(); 
 
    
 
document.write(anOtherObject.aProperty()); //abc

+0

Aber jetzt müssten Sie 'anOtherObject.aProperty()' machen, um '" abc "' – Bergi

+1

zu bekommen. Ich habe seinen Code einfach kopiert, dachte ich Die Immobilie zu schreiben war Aufgabe. Sie "anotherObject.aproperty" mit Klammern aufrufen ... Ich werde das Snippit bearbeiten .. –

+0

@RayWadkins: Aber das ist nicht, was das OP will – Bergi