Показать сообщение отдельно
  #11 (permalink)  
Старый 27.03.2013, 19:32
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

придётся заставить себя не использовать сеттеры длины массива, а использовать встроенные методы

function ArrayLike () { /* NULL */}

// Object.create легко эмулируется
//ArrayLike.prototype = Object.create(Array.prototype);

// вот так, например
var noop = function () {};
noop.prototype = Array.prototype;
ArrayLike.prototype = new noop();
ArrayLike.prototype.constructor = ArrayLike;

// расширим
ArrayLike.prototype.TEST = "Hello World!";

var a = new ArrayLike();

// опробуем новый супер-массив
a.push("a");
alert (a.length + '\n' + a);

a.push("b");

a.push("c");
alert (a.length + '\n' + a);

// повыводим типы
alert( "type: " + typeof(a) );
alert( "class: " + Object.prototype.toString.call(a) );

// и проверим, не тронули ли мы пртотип массива
alert( "a.test : " + a.TEST );
alert( "[].test : " + ['нету тут такого'].TEST);
// и тут тоже
alert( "new Array().test : " + new Array().TEST);

Последний раз редактировалось melky, 27.03.2013 в 19:37.
Ответить с цитированием