人!
我总体上在JS和OOP中给出了我的第一步,我正在尝试为我的关卡构建可能过于严格的代码,但我想要我的设置并且变得像“object.a”和“ object.a = value“而不是称它们为”getA“和”setA“,最重要的是,它们最终不像函数(”object.a()“和”object.a(value)“)。
我设计这个页面是为了找到我的做法,但它让我发疯:
有人能帮助我吗?
这是我的代码:
<!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 :(得分: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);
}
}
}