Javascript-作为关联数组的键返回的原型函数名
我想向javascript的数组对象添加一个原型函数 我遇到的问题是,当我步进数组的键时,原型函数的名称出现在数组的键中 下面是一个示例来说明问题:Javascript-作为关联数组的键返回的原型函数名,javascript,arrays,prototype-programming,Javascript,Arrays,Prototype Programming,我想向javascript的数组对象添加一个原型函数 我遇到的问题是,当我步进数组的键时,原型函数的名称出现在数组的键中 下面是一个示例来说明问题: Array.prototype.foo=函数(){ //做点什么 } 功能键(){ var水果=[“苹果”、“梨”、“香蕉”]; 对于(输入水果)警报(键);//警报:0、1、2、foo } 有什么办法可以解决这个问题吗 我不必对函数进行原型化,但从可读性的角度来看,我更愿意这样做 EDIT:为了清楚起见,上面示例的实际实现会在关联数组中进行迭
Array.prototype.foo=函数(){
//做点什么
}
功能键(){
var水果=[“苹果”、“梨”、“香蕉”];
对于(输入水果)警报(键);//警报:0、1、2、foo
}
有什么办法可以解决这个问题吗
我不必对函数进行原型化,但从可读性的角度来看,我更愿意这样做
EDIT:为了清楚起见,上面示例的实际实现会在关联数组中进行迭代,因此会出现for..in循环
编辑:谢谢各位的回复,但我想你们错过了我想要的。我想知道的是,我是否可以向javascript的数组对象添加一个原型函数(或者以一种不同的方式声明该函数,从而产生相同的效果),而不必在通过for..in循环遍历数组时将函数名调高。以
indexOf
函数为例。Javascript似乎在内部以这样一种方式定义它,即它不会出现在对象/数组的键中(对吗?)。运行时是否可以复制相同的行为?您需要检查循环中是否存在果.hasOwnProperty(key)
。要避免继承for..in的可枚举属性,请使用hasOwnProperty测试:
for (var p in obj) {
if (obj.hasOwnProperty(p)) {
// p is a property of obj and not inherited
}
}
不建议将for..in与数组一起使用-如果需要对象,请使用对象
数组通常用于按顺序访问成员的位置,例如使用循环中的计数器。使用for..返回属性的顺序取决于实现,并且不同浏览器之间有所不同,因此您无法保证顺序。正如James所说,使用而不是
function keys() {
var fruit = ["apples", "pairs", "bananas"];
for(var key in fruit) {
alert(key);
}
}
相反,请执行以下操作
function keys() {
var fruit = ["apples", "pairs", "bananas"];
for(var i = 0; i < fruit.length; ++i) {
alert(i);
}
}
功能键(){
var水果=[“苹果”、“成对”、“香蕉”];
对于(变量i=0;i
由于length属性将仅使用索引数组项而不是添加到原型中的项进行更新。若要通过与for in的关联数组进行迭代并获得所需内容,我将使用
typeof
键入检查是否合适,并限制为非函数。你可以用
编号
,
字符串
,
boolean
,
对象
,
功能
和未定义
带类型
我很感激它并不总是可用的,但是你可以通过使用或者如果你正在使用一个JavaScript库(很有可能并且强烈推荐)来避免整个混乱,那么你可以使用Prototype、Sugar或jQuery之类的东西。不要使用
for…in
来迭代数组。使用一个普通的for
循环,你就不会有这个问题。是的,除非它是一个关联数组-我不知道有什么方法可以在不使用for..in循环..的情况下迭代关联数组。或者你也可以这样做,但如果(fruit[key].constructor!=function),请检查类型不是函数您应该更新您的示例来说明这一点。javascript中没有“关联数组”。有对象和数组。数组只是具有特殊长度属性和一些方便方法的对象。对象只是无序的名称/值对包。谢谢,这很方便
function keys() {
var fruit = ["apples", "pairs", "bananas"];
for(var i = 0; i < fruit.length; ++i) {
alert(i);
}
}