2016-08-19 1 views
0

Jungs!Fangen mit JS Objects

Ich gebe meine ersten Schritte in JS und in OOP im Allgemeinen, und ich versuche, Code vielleicht zu stilized für mein Niveau zu bauen, aber ich möchte meine Sets und wird wie "object.a" und "object.a = value" und nenne sie nicht "getA" und "setA" und vor allem definitiv nicht wie eine Funktion ("object.a()" und "object.a (value)").

ich diese Seite entwerfen sie meine Art und Weise zu tun, aber es macht mich verrückt zu finden:

  1. Ich weiß nicht, warum „wa“ hält auf Inkrementieren es ist Wert, bis es klappt heraus mit der Meldung „zu viel Rekursion ".
  2. Ich sehe nicht, wie man für a und a ein "a" innerhalb von "coso" sehen kann.

Kann mir jemand helfen?

Hier ist mein Code:

<!doctype html> 
<html> 
<head> 
<link href="/style.css" rel="stylesheet" type="text/css"> 

<meta charset="utf-8"> 
<style> 
</style> 

<script> 
    function coso() { 
     var a = 1024; 

     coso.prototype = { 
      get a() {return this.a}, 
      set a(valor) {this.a = valor} 
     } 

     this.muestraA = function() {if(a === this.a) {alert("¡Yupi!")} else alert("A vale: " + a +", pero a vale: " + this.a)} 
    } 

    function GuardaA(valor) { 
     var obj = new coso(); 

     obj.a = valor; 

     obj.muestraA(); 

     return obj.a; 
    } 
</script> 
<title>Prueba Objeto</title> 
</head> 

<body> 
    <h1>Prueba Objeto</h1> 
    <form onchange="x.value=GuardaA(wa.value)"> 
     <label for="wa">Valor para A</label> 
     <input type="number" id="wa"> 
     <label for="x">A vale:</label> 
     <output id="x" for="wa"></output> 
    </form> 
    <footer></footer> 
</body> 
</html> 
+0

'var a' ist nicht dasselbe wie' this.a'. – Barmar

+0

Sie erhalten unendliche Rekursion, weil 'this.a'' get a() 'aufruft, was versucht,' this.a' zu lesen, was 'get a()' aufruft, und so weiter. – Barmar

Antwort

0

Sie bekommen eine unendliche Rekursion, da die get a() Funktion zu lesen this.a versucht. Aber this ist das Objekt, das die get a() Funktion hat, so dass es diese Funktion wiederholt aufruft, und so weiter.

Sie sollten auf die lokale Variable a zugreifen, da der ganze Punkt der Definition eines Getter und Setter ist, weil Sie diese Variable anstelle einer regulären Eigenschaft verwenden möchten.

function coso() { 
    var a = 1024; 

    coso.prototype = { 
     get a() {return a;}, 
     set a(valor) {a = valor;} 
    } 

    this.muestraA = function() { 
     if(a === this.a) { 
      alert("¡Yupi!"); 
     } else { 
      alert("A vale: " + a +", pero a vale: " + this.a); 
     } 
    } 
}