Javascript不能在另一个函数中调用Push On Array

Javascript Can't Call Push On Array Inside Another Function

本文关键字:调用 Push On Array 函数 不能 另一个 Javascript      更新时间:2023-09-26

我有一个非常简单的JavaScript问题…

我有一个函数Pets,它包含三个变量:整数、字符串和数组,定义如下:

function Pets() {
    var index;
    var name;
    var animals = ["cat", "dog"];
}

在下面的另一个函数中,我声明了一个类型为Pets的变量,并将"mouse"推入animals数组。然后,我执行控制台日志来查看这些值。

function Test() {
    ...
    var pets = new Pets();
    pets.index = 1;
    pets.name = "My Pets";
    pets.animals.push("mouse");
    console.log(pets);
}

不知什么原因,我没有看到控制台的任何输出。

然后我在调用animals.push:

之前和之后添加了更多的控制台日志记录
    var pets = new Pets();
    pets.index = 1;
    pets.name = "My Pets";
    console.log("BEFORE PUSH");
    console.log(pets);
    pets.animals.push("mouse");
    console.log("AFTER PUSH");

下面是我的输出:

BEFORE PUSH
Pets {index: 1, name: "My Pets"} 

注意,我只看到第一个控制台日志,而不是第二个(在push之后),我认为这表明在动物上调用push有问题。

还请注意,控制台输出显示Pets有一个名为index的属性和一个名为name的属性,但没有任何地方表明还有一个名为animals的属性,这是我的数组。

我尝试将数组声明更改为:

var animals = new Array();

但这似乎也没有帮助。

在将元素压入动物数组之前,是否需要做一些特殊的事情来初始化动物数组?更一般地说,为什么属性animals甚至没有作为Pets类的一部分出现?

谢谢你,1月

你声明变量的方式不会使它们在Pets构造函数之外可见

这就是为什么您看不到第二个控制台,因为

pets.animals.push("mouse");

将抛出错误TypeError: Cannot read property 'push' of undefined(或取决于浏览器)。这将导致脚本的其余部分停止执行。

您在第一个控制台日志中看到indexname的唯一原因是因为您在创建宠物对象之后在对象上创建了它们。您需要使用this操作符或在原型

上设置它们来声明它们。
function Pets() {
    this.index = null;
    this.name = null;
    this.animals = ["cat", "dog"];
}

您是否尝试在声明期间将变量分配给窗口而不是使用var?设置为窗口。myVar = ["var1", "var2"]

您不能以这种方式访问宠物的任何属性,因为它们没有暴露给外部函数。通过

创建属性索引和名称
pets.index = ...

你必须像这样修改你的代码:

function Pets() {
    this.index;
    this.name;
    this.animals = ["cat", "dog"];
}
function Test() {
    var pets = new Pets();
    pets.index = 1;
    pets.name = "My Pets";
    pets.animals.push("mouse");
    console.log(pets);
}
Test();