Javascript不能在另一个函数中调用Push On Array
Javascript Can't Call Push On Array Inside Another Function
我有一个非常简单的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(或取决于浏览器)。这将导致脚本的其余部分停止执行。
您在第一个控制台日志中看到index
和name
的唯一原因是因为您在创建宠物对象之后在对象上创建了它们。您需要使用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();
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何从Java/scala调用js美化程序
- 如何调用这个匿名 JavaScript 函数
- NodeJS API调用中Array中的Push和Pull元素
- Javascript/jQuery - “无法调用未定义的方法'push'”,而它是定义的
- Array.push受到Array.unshift后调用的影响
- 未捕获的类型错误:调用 push() 时的类型错误
- 未捕获的类型错误:不能调用方法'push'未定义的(d3强制布局)
- Javascript不能在另一个函数中调用Push On Array
- 哪个更具性能:同时调用array.prototype.push和所有元素,或者推送每个元素一次
- 未捕获类型错误:不能调用方法'push'在jquery-1.5.1.min.js中未定义
- 被调用函数中的数组push如何更新调用函数中的数组,调用函数将数组传递给javascript中的函数
- 未处理的承诺拒绝:不能调用方法'push'零
- 未捕获的类型错误:不能调用方法'push'的定义
- 测试$httpProvider.interceptors.push()是否在Angular中被jasmine调用过
- 未捕获的类型错误:不能调用方法'push'——Angularjs
- 在哪里以MVC形式调用_gaq.push谷歌分析
- 重写数组push时调用原始方法
- 注意数组push时不被调用