【问题标题】:undefined object in map collection javascript地图集合javascript中的未定义对象
【发布时间】:2014-09-27 19:17:32
【问题描述】:

我有我的自定义类,我想将它存储到地图集合中,但是当我想从地图中获取一个值(我的对象的一个​​实例)时,我得到了对象未定义的错误。有没有可能投射物体或其他东西?如果我推送简单的字符串而不是我的自定义类的对象,一切都很好。有人可以告诉我如何解决这个问题吗?当然如果这个问题能解决的话。

js:

function CustomClass(first, second, third){
    this.one = first;
    this.two = second;
    this.three = third;
}

CustomClass.prototype.constains(obj1, obj2){}

...
var dictionary = new Object();
dictionary[key] = CustomClass(1, "lel", 2);
for(var el in dictionary) //here IE debugger shows that I have a right key, but the value is undefined.
{
    if(dictionary[el].contains(something))
    {...}
}

如果取决于我使用 IE10。感谢您的帮助和提示!

编辑:

如果我使用

dictionary[key] = new CustomClass(1, "lel", 2);

代替:

dictionary[key] = CustomClass(1, "lel", 2);

它有效,但有人可以告诉我原因,如下所示:

dictionary[key] = "lel"; 

没有 new 操作符可以工作吗?据我所知,js 中的所有内容都是一个对象,那么 beetwen 插入字符串和自定义类有什么区别? (我是 js 新手,见识不好,见谅)

【问题讨论】:

  • 你的语法不对,你没有用new调用CustomClass,能发个demo重现问题吗?试试jsfiddle.net
  • var elem[key] = 看起来不对
  • @elclanrs 哇,谢谢你的快速回答,如果我添加一个新的它可以工作:) var elem[key] = new CustomClass(1, "lel", 2);而不是 var elem[key] = CustomClass(1, "lel", 2);但是你能告诉我为什么,像这样: var elem[key] = "lel";没有新运营商的作品?据我所知,js 中的所有内容都是一个对象,那么 beetwen 插入字符串和自定义类有什么区别? (我是 js 新手,很抱歉我的知识不好)
  • 什么是elem?你还没有声明。另外,正如大卫所说,你不应该在elem[key] = 前面使用var
  • @Alnitak 抱歉,我没有注意到我解决了这个问题。它应该是 dictionary[key] = ..

标签: javascript collections map undefined


【解决方案1】:

正如你已经了解到的,在 JS 中对象是用函数构造的,但 new 关键字很关键。

当您执行var foo = new Bar() 时,解释器不仅会在该构造函数中创建一个新对象并将其设置为this,该对象也是构造函数的隐式返回值。

如果你省略了new,那么在Bar 中,this 上下文将是默认的(在 ES5 严格模式下是 undefined,或者是全局对象 - 通常是 window 否则),并且不存在函数的返回值(即undefined)将赋值给foo

可以将普通函数转换为不需要new 关键字的“自动构造函数”,如下所示:

function Bar(x, y, z) {
    if (!(this instanceof Bar)) {
        return new Bar(x, y, z);
    }

    ...
}

即该函数可以确定它不是用new 调用的,所以立即用new 调用它自己。

【讨论】:

  • 感谢您的解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 2018-11-14
  • 2023-04-01
  • 2017-12-28
  • 2017-10-29
  • 1970-01-01
相关资源
最近更新 更多