Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 扩展地图对象_Javascript_Dictionary_Prototype_Extend - Fatal编程技术网

Javascript 扩展地图对象

Javascript 扩展地图对象,javascript,dictionary,prototype,extend,Javascript,Dictionary,Prototype,Extend,我不知道如何用prototype扩展map对象,希望您能帮助我。 我有这样的想法: var map = {'one':1, 'two':2}; 我想有一个方法来检查是否存在密钥: if (map.containsKey('one')){...} 如何扩展映射对象?最简单的方法是直接在对象中添加函数: map.containsKey = function(key) { return this[key] ? true : false; }; 这些不是“地图”,而是对象。基于Mauric

我不知道如何用prototype扩展map对象,希望您能帮助我。 我有这样的想法:

var map = {'one':1, 'two':2};
我想有一个方法来检查是否存在密钥:

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

如何扩展映射对象?

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

map.containsKey = function(key) {
    return this[key] ? true : false;
};
这些不是“地图”,而是对象。基于Maurice的答案,如果您希望将此应用于所有对象:

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

在Javascript中,实际上并不需要这种方法

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

应该这样做

修改对象是危险的。原型,因为。通常,如果要将方法添加到类似于字典的对象中,则应该为哈希实例创建一个要从中继承的对象


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

已经有一个操作符来测试对象中是否存在键

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


正如其他人所说,如果您的代码必须很好地处理那些不了解
hasOwnProperty()
的人编写的代码,那么扩展
Object.prototype
可能不是一个好主意

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

obj.hasOwnProperty(name)
检查对象中是否存在具有给定名称的属性

name in obj
此外,还包括通过对象的原型链继承的属性

typeof obj[name] !== 'undefined'
如果属性存在但已设置为
未定义
,则将另外计算为
false


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

不错,目前可以使用。如果我有多个映射实例,我如何将其推广到工作状态?@Haoest:因为您使用的是常规Javascript对象作为映射,所以对象已经具有函数hasOwnProperty。这不会检查属性是否存在,而是在布尔上下文中的值;另外,它有点难看:使用
returnboolean(这个[key])
return!!此[键]
要转换为布尔值,您可以使用hasOwnProperty,这样map.containsKey('containsKey')就不会总是返回true!!:pNoooo!别管Object.prototype。我想Chetan想告诉你的是,将
hasOwnProperty()
重命名为
containsKey()
没有多大意义,你的解决方案可能会破坏在
中应该使用
hasOwnProperty()。或者如果“一”是从对象的原型派生的,而不是它自己的属性。
typeof obj[name] !== 'undefined'