创建一个新数组并在一行中将其推入 \- Javascript OOP

新手上路,请多包涵

我有这个带有函数的代码,其中我试图定义一个 array 然后在下一行推送到它:

 function Spot(value) {
  this.x = null;
  this.y = null;
  this.values = [];
  this.values.push(value);
}

我试过这个:

 this.values = [].push(value);

this.values = (this.values || []).push(value);

但是失败了。是不是代码有问题……

原文由 popeye 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 313
2 个回答

您缺少数组初始化语法:

 var x = [ 1, 2, 3 ];

在您的情况下,这将是:

 this.values = [ value ];

更多信息在这里: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array


编码:

 var x = ([]).push("y");

看起来它应该生成一个数组并将值推送给它。它确实创建了数组,但是数组没有返回到 x ,返回了数组的新长度,即 1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push

push() 方法将一个或多个元素添加到数组的末尾并 返回数组的新长度。 [强调我的]


如评论中所述,更接近您最初尝试的替代方案是:

 var x = ([]).concat("y");

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat

concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是 返回一个新数组

原文由 freedomn-m 发布,翻译遵循 CC BY-SA 4.0 许可协议

您创建数组并将 value 推送到它的方式是正确的。但是由于它是在函数内部创建的,因此您需要以某种方式访问函数外部的 this 对象。

由于您不返回任何内容,因此可以将其作为构造函数调用。

 var spot = new Spot()
function Spot(value) {
  this.x = null;
  this.y = null;
  this.values = [];
  this.values.push(value);
}

var spot = new Spot();

如果您不想将其作为构造函数调用,则可以简单地返回 this 对象。

 function Spot(value) {
  this.x = null;
  this.y = null;
  this.values = [];
  this.values.push(value);
  return this;
}

原文由 Rohit Agrawal 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题