3

我不知道如何用原型扩展地图对象,希望您能提供帮助。我有这样的事情:

var map = {'one':1, 'two':2};

我想有一种方法来检查密钥是否存在:

if (map.containsKey('one')){...}

我将如何扩展地图对象?

4

6 回答 6

9

修改 Object.prototype 很危险,因为它会影响所有对象,并且通常会破坏您可能正在使用的其他库。一般来说,如果你想为类字典对象添加方法,你应该为你的哈希实例创建一个对象来继承,比如 Prototype Hash object

对于这个特定的实例,你真的应该只使用if (key in map)or if (map.hasOwnProperty(key))

于 2009-03-24T21:14:44.810 回答
4

已经有一个运算符来测试对象内部是否存在键。

(在 JavaScript 中,对象被实现为地图,所以实际上没有真正的地图。)

if( 'one' in map ) 
{
   alert(map['one']);
}
于 2009-03-24T21:18:12.507 回答
1

这些不是“地图”,它们是对象。基于莫里斯的回答,如果您希望这适用于所有对象:

Object.prototype.containsKey = function(key) {
    return this.hasOwnProperty(key);
};
于 2009-03-24T20:57:27.613 回答
0

最简单的方法是直接在对象中添加一个函数:

map.containsKey = function(key) {
    return this[key] ? true : false;
};
于 2009-03-24T20:53:45.780 回答
0

在 Javascript 中,你真的不需要这样的方法。

if ( map['one'] ) {
   // do something
}

应该这样做

于 2009-03-24T21:02:50.080 回答
0

正如其他人所说,Object.prototype如果您的代码必须与不了解hasOwnProperty().

无论如何,我知道有三种“正确”的方法来检查属性是否可用:

obj.hasOwnProperty(name)

检查对象中是否存在具有给定名称的属性。

name in obj

还包括通过对象的原型链继承的属性。

typeof obj[name] !== 'undefined'

false如果该属性存在但已设置为 ,将另外评估undefined

一些非 JS 对象(例如window.external在 IE 中)可能无法实现hasOwnProperty(),因此必须使用其他检查之一。

于 2009-03-25T00:44:59.547 回答