Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.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_Arrays_Prototype Programming - Fatal编程技术网

Javascript-作为关联数组的键返回的原型函数名

Javascript-作为关联数组的键返回的原型函数名,javascript,arrays,prototype-programming,Javascript,Arrays,Prototype Programming,我想向javascript的数组对象添加一个原型函数 我遇到的问题是,当我步进数组的键时,原型函数的名称出现在数组的键中 下面是一个示例来说明问题: Array.prototype.foo=函数(){ //做点什么 } 功能键(){ var水果=[“苹果”、“梨”、“香蕉”]; 对于(输入水果)警报(键);//警报:0、1、2、foo } 有什么办法可以解决这个问题吗 我不必对函数进行原型化,但从可读性的角度来看,我更愿意这样做 EDIT:为了清楚起见,上面示例的实际实现会在关联数组中进行迭

我想向javascript的数组对象添加一个原型函数

我遇到的问题是,当我步进数组的键时,原型函数的名称出现在数组的键中

下面是一个示例来说明问题:


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);
  }
}