gpt4 book ai didi

javascript - 使用 [].push.call() 修改对象的长度

转载 作者:行者123 更新时间:2023-11-29 16:04:44 25 4
gpt4 key购买 nike

无法重现 MDN's example («以类似数组的方式使用对象»)。

  let obj = {
length: 0,
addEl: function (element) {
[].push.call(this, element);
};
};
// Node REPL still expect me to do something, so there's an error. Why?

伙计们,你们能解释一下这里出了什么问题吗?另外,我似乎不明白这里的机制:

// from the example:
obj.addElem({});
obj.addElem({});
console.log(obj.length);
// → 2

如果我们用一些不同的参数而不是 {} 调用该函数,它会起作用吗?如果不能,那我们为什么要使用 {} 呢?这里的 this 上下文是什么:addEl 方法或对象本身?如果是第二个,为什么不用 addEl 函数:它不是数组函数,所以它应该有自己的 this(而且,我想,我会使用类似 objThis = this; 属性)。

另一个相关问题是 here .

最佳答案

您帖子中的代码有一些拼写错误:

  let obj = {
length: 0,
addEl: function (element) {
[].push.call(this, element);
};
^ syntax error
};
// Node REPL still expect me to do something, so there's an error. Why?

正如您在代码注释中所怀疑的那样,有一个语法错误,我已为您标记。删除那个分号。

然后,在尝试您编写的示例时 obj.addElem,但是在上面的对象文字中你有 addEl.

如果您只是复制粘贴该示例,该示例应该可以正常工作。

var obj = {
length: 0,

addElem: function addElem(elem) {
// obj.length is automatically incremented
// every time an element is added.
[].push.call(this, elem);
}
};

// Let's add some empty objects just to illustrate.
obj.addElem({});
obj.addElem({});
console.log(obj.length);
// → 2

What if we call the function with some different argument, not {}, will it work?

当然会。为什么不呢? JavaScript 中的数组可以包含不同类型的值。它不需要是同质的,所以是的,您可以插入 {} 以外的内容。

What is the this context here: addEl method or the object itself?

它是调用方法的对象。所以它是 obj。这就是方法调用的工作原理。当您调用 obj.something() 时,something 中的 this 将是 obj


如果您对此示例仍有疑问,请随时发表评论。

关于javascript - 使用 [].push.call() 修改对象的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46630390/

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