2014-12-09 2 views
-3

Что такое внутренняя логика кода для методов Push и Pop в javascript .. ?? Как метод Push сохраняет значения в массиве.Как работает код Javascript Array Push внутри?

+2

Есть так много ответов как есть JavaScript времени автономной работы. – meagar

+3

Он будет отличаться для каждого механизма JavaScript. Вам нужно будет посмотреть исходный код каждого (не всегда доступный), чтобы увидеть, как он работает. Например, [вот последняя версия внутреннего метода Google V8 'ArrayPush()') (https://code.google.com/p/v8/source/browse/branches/3.7/src/array.js#452) , –

ответ

0

Методыи pop намеренно являются общими, они полагаются только на существование свойства length и могут добавлять и удалять свойства.

Метод push будет читать свойство length, добавить свойство с этим именем и увеличить длину. В основном:

function push(value) { 
    var len = this.length; 
    this[len] = value; 
    len++; 
    this.length = len; 
    return len; 
} 

Метод pop прочтет length свойства, уменьшить его, получить свойство с таким именем и удалить свойство. В основном:

function pop() { 
    var len = this.length - 1; 
    var value = this[len]; 
    this.length = len; 
    delete this[len]; 
    return value; 
} 

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

Методы преднамеренно универсальны, поэтому их можно использовать для объектов, которые на самом деле не являются массивами. Вы можете сделать свой собственный объект, который поддерживает их, только имея length свойства:

var o = { 
    length: 0, 
    push: Array.prototype.push, 
    pop: Array.prototype.pop 
}; 

o.push(1); 
var one = o.pop(); 

Демо: http://jsfiddle.net/Guffa/9r4gavzb/

+0

Спасибо за подробный ответ. Цените это. !! Моя цель состояла в том, чтобы создать объект customArray(), например clone of Array(). Теперь после нажатия всех моих элементов, как происходит связывание между каждым объектом, который я ввел в myCustomArray(). "var values ​​= new CustomArray ('xyz', 'xxx', 'yzx');" как значения хранятся внутри. – dcheepurapalli

+0

@dcheepurapalli: Элементы в массиве сохраняются как свойства объекта. Первый элемент - это просто свойство с именем «0», второй - просто свойство с именем «1» и т. Д. Вот почему методы 'push' и' pop' будут с удовольствием использовать объект вместо массива, если он имеет свойство 'length'. – Guffa

+0

Awesome .. !! Большое спасибо @ Guffa – dcheepurapalli

Смежные вопросы