Расширение Javascript Array - PullRequest
       4

Расширение Javascript Array

0 голосов
/ 05 августа 2009

Просто удивительно. Я расширил объект Array javascript, используя его прототип следующим образом:

<html>
<head>
</head>
<body>
<script type="text/javascript">
  function SomeMethod(){
  alert('Hello');
  }
  if(typeof Array.prototype.SomeMethod ==='undefined' ){
    Array.prototype.SomeMethod = SomeMethod;
  }
  var ax=new Array("A","B","C");
  for(var i in ax){
    document.write(ax[i]);
  }
</script>

</body>
</html>

Результат будет:

ABCfunction SomeMethod() { alert("Hello"); } 

EDIT: Хотя я уже нашел ответ, я чувствую необходимость добавить некоторые больше информации, чтобы было понятнее для других.

Ответы [ 3 ]

3 голосов
/ 05 августа 2009

for..in перебирает (не встроенные) свойства объекта. Не используйте его для перебора массива. Просто используйте обычный цикл for.

Прочитать эту ссылку https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Statements/for...in#Description

2 голосов
/ 05 августа 2009

Вопрос будет полезен; -)

Полагаю, вы не хотите, чтобы свойство prototype отображалось? JS не позволяет вам устанавливать «DontEnum» для свойств, которые вы добавляете к прототипу, поэтому вы должны проверить, есть ли у массива свойство или это свойство его прототипа:

for(var i in ax) {
    if (a.hasOwnProperty(i)) {
        document.write(ax[i]);
    }
}

хотя для итерации по массиву на самом деле не следует использовать for...in, так как он предназначен для итерации по свойствам объекта, а не по элементам массива.

1 голос
/ 05 августа 2009

Крокфорд отлично объясняет это на своем сайте и в своих видео. Похоже, вы злоупотребляете типом Array, используя его в качестве хеш-таблицы. В этом случае вам нужно будет сделать следующее

Из Крокфорда:

JavaScript имеет очень хорошие обозначения удобства для манипулирования Hashtables.

var myHashtable = {};

Это утверждение создает новую хеш-таблицу и назначает его на новый местный переменная. JavaScript свободно набран, поэтому мы не используем имена типов в деклараций. Мы используем индекс нотация для добавления, замены или извлечения элементы в хеш-таблице.

myHashtable["name"] = "Carl Hollywood";

Существует также точечная запись, которая немного удобнее.

myHashtable.city = "Anytown";

Точечная нотация может использоваться, когда нижний индекс является строковой константой в форма юридического идентификатора. Потому что ошибка в определении языка, зарезервированные слова не могут быть использованы в точечные обозначения, но они могут быть использованы в нижняя запись.

Вы можете видеть, что JavaScript хеш-таблица очень похожа на Обозначения объектов и массивов в Java. JavaScript делает это намного дальше: объекты и хеш-таблицы одинаковы вещь, чтобы я мог написать

var myHashtable = new Object();

и результат был бы точно то же самое.

Существует возможность перечисления встроено в оператор for.

for (var n in myHashtable) {
    if (myHashtable.hasOwnProperty(n)) {
        document.writeln("<p>" + n + ": " + myHashtable[n] + "</p>");
    }
}

Я считаю, что код jquery .each делает это для вас, но я не уверен на 100%.

Если вы используете фактический массив и хотите использовать его правильно, вам нужно просто сделать

for (var i = 0; i < myArray.length; i++)
{
    alert(myArray[i]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...