在使用Javascript获取乐趣时,我遇到了围绕类和对象的困难。我以为我知道它不是Java,也不是C++。最后,我将我的问题转化为一个小例子来研究这个问题。为什么Javascript实例对象中有奇怪的重复?
运行示例生成输出:
>>>>>> keys aprop,bprep,cprep,dprop,bprop,cprop.
我预期的输出:
>>>>>> keys aprop,bprep,cprep,dprop.
如果重复,你为什么不aprop和dprop还复制?我以为通过使用getOwnPropertyNames我阻止了原型键。有没有办法解决这个比较每个密钥以消除重复的短小?
<script>
var objList = [];
class TestObj {
constructor(aprop, bprop, cprop) {
this.aprop = aprop;
this.bprep = bprop;
this.cprep = cprop;
this.dprop = 0;
}
getAprop() { return aprop; }
getBprop() { return bprop; }
getCprop() { return cprop; }
getDprop() { return dprop; }
setAprop(arg) { aprop = arg; }
setBprop(arg) { bprop = arg; }
setCprop(arg) { cprop = arg; }
setDprop(arg) { dprop = arg; }
}
function create() {
putList();
var t1 = objList[1];
alert("fromlist "+t1);
var keys = Object.getOwnPropertyNames(t1);
console.log(">>>>>> keys "+keys);
}
function putList() {
onlist(1, "one" [1]);
onlist(2, "two", [2, 2]);
onlist(3, "three", [3, 3, 3]);
}
function onlist(a, b, c) {
var item = new TestObj();
item.aprop = a;
item.bprop = b;
item.cprop = c;
objList.push(item);
}
create();
</script>
这可能有助于使您的示例更加简单;你创建了一堆对象,但只有其中一个被使用,并且getters和setter不是必需的,并且实际上不工作。也许把它减少到'function TestObj(){this.aprop = 0; } var keys = Object.getOwnPropertyNames(new TestObj());的console.log(键);'? – Ryan
你在哪里设置'Testobj.prototype.somekey'? – Paul
没有重复。你只是拼错了一些专有名称。 – Bergi