Javascript 扩展地图对象
我不知道如何用prototype扩展map对象,希望您能帮助我。 我有这样的想法: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
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'