扩展地图对象

时间:2009-03-24 20:46:26

标签: javascript dictionary prototype extend

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

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

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

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

如何扩展地图对象?

6 个答案:

答案 0 :(得分:9)

修改Object.prototype 是危险的,因为it affects all objects and will usually break other libraries you may be using。通常,如果要将方法添加到类字典对象,则应为哈希实例创建一个对象,以继承like the Prototype Hash object

对于此特定情况,您应该只使用if (key in map)if (map.hasOwnProperty(key))

答案 1 :(得分:4)

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

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

if( 'one' in map ) 
{
   alert(map['one']);
}

答案 2 :(得分:1)

这些不是“地图”,而是对象。基于莫里斯的答案,如果你想将它应用于所有对象:

Object.prototype.containsKey = function(key) {
    return this.hasOwnProperty(key);
};

答案 3 :(得分:0)

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

map.containsKey = function(key) {
    return this[key] ? true : false;
};

答案 4 :(得分:0)

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

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

应该这样做

答案 5 :(得分:0)

正如其他人所说的那样,如果你的代码必须与不了解Object.prototype的人编写的代码一致,那么扩展hasOwnProperty()可能不是一个好主意。

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

obj.hasOwnProperty(name)

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

name in obj

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

typeof obj[name] !== 'undefined'
如果属性存在但已设置为false,则

将另外评估为undefined

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