JavaScript原型,调用函数时出现问题
JavaScript prototype, issue in calling function
我的原型定义低于
var DupPlayer = function(strName){
this.name = strName;
}
var FreqTab = function(strMsg,strName){
this.value =strMsg;
this.original = strName;
this.dupPlayers = new Array();
FreqTab.prototype.addDup = function(dup){
this.dupPlayers.push(dup);
}
}
我正在创建以字符串为键的数组对象。
var freqTab = new Array();
if(freqTab[key]==undefined){
freqTab[key] = new FreqTab(strMsg,strName);
}else{
var temp = freqTab[key];
temp.addDup(new DupPlayer(strName));
}
获取错误"TypeError:temp.addDup不是函数"。
请帮我在函数调用中哪里出错了。
[edit]发现当键为"reduce"时会出现此问题。:(
console.log(freqTab[key])给出以下输出,只有当键被减少时,对象才被存储为函数。
{ value: 'sleeping', original: 'Pug', dupPlayers: [] }
{ value: 'black', original: 'Sur', dupPlayers: [] }
[Function: reduce]
出现错误的原因:
temp.addDup不是一个函数
实际上是一个有趣的功能,当您试图访问数组中未定义/无效的项时会发生这种情况。当您尝试访问:
freqTab["reduce"]
它实际上会将其读取为实际的本机reduce()
函数。对于freqTab["sort"]
等其他函数也会发生同样的情况。然后指出addDup
不是reduce
的方法。
请注意,在您的代码中,数组是空的,由于您通过字符串访问项目,您可能更希望使用对象:
var freqTab = { 'reduce': ... };
具体来说,您可能正在寻找:
var freqTab = { 'reduce': new FreqTab(strMsg,strName) };
尝试使用定义之外的原型,如
var FreqTab = function(strMsg,strName){
this.value =strMsg;
this.original = strName;
this.dupPlayers = new Array();
}
FreqTab.prototype.addDup = function(dup){
this.dupPlayers.push(dup);
}
正如我在评论中所解释的,问题是在这种情况下
注释:如果
freqTab[key]
未定义,则将其定义为新对象。但如果不是,那么它只是数组的一个简单元素,而不是您的对象。因此addDup
不可用。
var freqTab = new Array();
if (freqTab[key] == undefined) {
freqTab[key] = new FreqTab(strMsg, strName);
} else {
var temp = freqTab[key];
temp.addDup(new DupPlayer(strName));
}
相反,试试这个:
var freqTab = new Array();
if (freqTab[key] == undefined) {
freqTab[key] = new FreqTab(strMsg, strName);
}
if(freqTab[key] instanceof FreqTab){
var temp = freqTab[key];
temp.addDup(new DupPlayer(strName));
}
else{
console.log("Not an object")
}
相关文章:
- IE9的HTML5 Canvas getImageData()函数存在问题
- javascript中的特定函数出现问题
- 运行Infinite Scroll后调用函数时出现问题
- jQuery使用ajax自动完成问题-TypeError:this.source不是函数
- 将代码放入click函数时出现javascript问题
- 使用setInterval调用原型函数时出现问题
- 在HTML中调用函数时出现问题
- 异步中的回调函数出现问题'张贴'
- Jquery函数返回订单问题
- 带有 JavaScript 随机数函数的未知问题
- 关于函数的Javascript问题 - IIFE
- 作用域问题-此函数是否形成闭包-JavaScript
- 用于异步函数中的循环和定时问题
- Createjs冲突问题localToLocal不是函数错误
- 使用Breeze脱机数据时出现未定义的问题不是函数
- 尝试将变量传递到对象中时的作用域问题'的方法构造函数
- Javascript函数变量传递语法问题
- 函数范围问题-函数未定义
- Javascript作用域问题:函数在$(doc).ready()中可用,但在事件处理程序中不可用
- 实现“喜欢”功能的问题.函数只工作一次