iegorov
12/5/2013 - 9:36 AM

Задание по Javascript ООП: Необходимо расширить тип Array, дополнив его методом each, применяющем переданную ему в качестве параметра функц

Задание по Javascript ООП:

Необходимо расширить тип Array, дополнив его методом each, применяющем переданную ему в качестве параметра функцию к каждому из элементов массива.

Например, код ["sdf", 423].each(function(){alert(this)}) должен последовательно вывести два сообщения, по количеству элементов.

Далее создать класс, который обладает полной функциональностью типа Array, а так же имеет метод .view, показывающий содержимое массива в модальном окне с возможностью редактирования. Вид и поведения окна может варьироваться на усмотрение исполнителя задачи.

Array.prototype.each = function(callback){
    for(var i = 0; i < this.length; i++) {
        callback.call(this[i])
    }
};
// ["sdf", 423].each(function(){alert(this)});

var MyArray = function() {
    return( this );
};

MyArray.prototype = Object.create( Array.prototype );
MyArray.prototype.view = function () {        
    var table,tbody,div,text,
        delElArr,
        addElArr,
        self = this;
    div = document.createElement("div");
    text = document.createTextNode('Удалить элемент массива');    
    div.setAttribute("id", "delElArr");
    div.appendChild(text);
    document.body.appendChild(div);

    div = document.createElement("div");
    text = document.createTextNode('Добавить элемент массива');    
    div.setAttribute("id", "addElArr");
    div.appendChild(text);
    document.body.appendChild(div);

    function renderArrayList() {
        content=document.getElementById("content");
        content.innerHTML = '';
        table = document.createElement("table");
        tbody = document.createElement("tbody");    
        table.appendChild(tbody);
        self.forEach(function(item) {
            var row = document.createElement("tr");
            var cell = document.createElement("td");
            cell.textContent = item;
            row.appendChild(cell);
            tbody.appendChild(row);
        });
        content.appendChild(table);
    } 
    renderArrayList();
    delElArr = document.getElementById('delElArr');
    delElArr.onclick = function() {
            self.pop();
            renderArrayList();
    };
    addElArr = document.getElementById('addElArr');
    addElArr.onclick = function() {
        self.push(prompt('Введите значение:'));
        renderArrayList();
    }
};

myArray = new MyArray();
myArray.push("one");
myArray.push("two");
myArray.view();