gpt4 book ai didi

javascript - 为什么 Javascript 实例对象中出现奇怪的重复?

转载 作者:行者123 更新时间:2023-11-28 18:08:55 25 4
gpt4 key购买 nike

在使用 Javascript 寻找乐趣时,我遇到了围绕类和对象的大量困难。我想我知道它不是Java,也不是C++。最后,我把我的问题变成一个小例子来研究这个。

运行示例会产生输出:

>>>>>> keys aprop,bprep,cprep,dprop,bprop,cprop.

我期望的输出:

>>>>>> keys aprop,bprep,cprep,dprop.

如果重复,为什么 aprop 和 dprop 不也重复?我曾以为通过使用 getOwnPropertyNames 我可以阻止原型(prototype)键。有没有办法解决这个问题,比较每个键以消除重复项?

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

最佳答案

我希望这实际上是你的问题。无论如何,这里是:

首先,一个最小的例子:

function Foo() {
this.bar = 0;
}

Object.keys(new Foo)

此表达式的结果是 ["bar"] 而不是 [],因为在构造函数中设置属性与在其他地方设置属性没有什么不同。它们不仅仅因为存在于构造函数中而出现在原型(prototype)上。这会起作用:

function Foo() {}
Foo.prototype.bar = 0;

Object.keys(new Foo)

现在 bar 位于原型(prototype)上,Object.keys 仅列出自己的属性名称,为 返回 [] >Foo 实例。但这通常不是您想要的。分配给实例上的 bar 仍然会创建一个新的自己的属性,如果它是可变的,那么改变它会影响 Foo 的所有实例。

Is there a way to fix this short of comparing each key to eliminate duplicates?

首先不要循环属性。

…万一您的意思是“重复”,请注意您的拼写方式不同:“bprep”和“cprep”与.“bprop”和“cprop”。

关于javascript - 为什么 Javascript 实例对象中出现奇怪的重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42059981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com