2016-08-19 28 views
0

夥計們!用JS對象捕捉

我正在給我的第一步在JS和一般的OOP,我試圖構建代碼可能過於stilized我的水平,但我想我的集和得到像「object.a」和「object.a = value」,而不是稱它們爲「getA」和「setA」,並且最重要的是,它們確實不像函數(「object.a()」和「object.a(value)」)。

我設計這個頁面找到我做的方式,但它讓我發瘋了:

  1. 我不知道爲什麼「WA」關於增加保持它的價值,直到它翻轉出來消息「太多遞歸「。
  2. 我不明白該怎麼做,並設置一個「coso」裏面的「a」。

有人能幫助我嗎?

這裏是我的代碼:

<!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'與'this.a'不是一回事。 – Barmar

+0

因爲'this.a'調用'get a()',它試圖讀取調用'get a()'的'this.a'等等,你會得到無限遞歸。 – Barmar

回答

0

你得到無限遞歸,因爲get a()功能試圖讀取this.a。但是this是具有get a()函數的對象,因此它會再次調用該函數,等等。

您應該訪問本地變量a,因爲定義getter和setter的全部意義在於您要使用該變量而不是常規屬性。

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