抓住JS对象

时间:2016-08-19 23:12:59

标签: javascript object scope

人!

我总体上在JS和OOP中给出了我的第一步,我正在尝试为我的关卡构建可能过于严格的代码,但我想要我的设置并且变得像“object.a”和“ object.a = value“而不是称它们为”getA“和”setA“,最重要的是,它们最终不像函数(”object.a()“和”object.a(value)“)。

我设计这个页面是为了找到我的做法,但它让我发疯:

  1. 我不知道为什么“wa”继续增加它的值,直到它翻出“过多递归”的消息。
  2. 我不知道怎样做才能得到一个并设置一个看到“coso”里面的“a”。
  3. 有人能帮助我吗?

    这是我的代码:

    <!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>
    

1 个答案:

答案 0 :(得分: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);
        }
    }
}