Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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.
Ответить с цитированием
  #12 (permalink)  
Старый 27.03.2013, 19:39
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

melky,
и зачем в прототип делать Object.create а не просто создать массив? хоть одну причину назови
Ответить с цитированием
  #13 (permalink)  
Старый 27.03.2013, 19:50
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от megaupload Посмотреть сообщение
melky,
и зачем в прототип делать Object.create а не просто создать массив? хоть одну причину назови
мне ..... а нет, погоди. так почему всё-таки TypeScript работает быстрее JavaScript?
Ответить с цитированием
  #14 (permalink)  
Старый 27.03.2013, 20:32
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

ты не ответил на мой вопрос)
Ответить с цитированием
  #15 (permalink)  
Старый 27.03.2013, 22:12
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

function MyArray() {}
MyArray.prototype = [];
MyArray.prototype.toString  = function(){alert('ну вы нубы')};
 
var q = new MyArray();
 
alert(Object.prototype.toString.call(q));

alert('— мы нубы? \n— ' + Array.isArray(q));

q.push(1);
q.push(1);

alert( 'concat:' + [].concat(q) );
alert( 'а должно быть: ' + [].concat([1,1]) );
Ответить с цитированием
  #16 (permalink)  
Старый 27.03.2013, 22:27
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

melky, ключевые моменты:

alert( Array.isArray(myArray) ) // true
alert( Object.prototype.toString.call(myArray) ) // [object Array]
myArray[0] = 'x' //
myArray.length // 1
myArray[1] = 'y', [].concat(myArray) // ['x','y']
Ответить с цитированием
  #17 (permalink)  
Старый 28.03.2013, 00:17
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

тогда удачи не понимаю, зачем это нужно
Ответить с цитированием
  #18 (permalink)  
Старый 28.03.2013, 00:54
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

Аналог __proto__ в ie (8+)
__________________
29375, 35
Ответить с цитированием
  #19 (permalink)  
Старый 28.03.2013, 06:42
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от melky
не понимаю, зачем это нужно
Я же объяснял: чтобы заставить zepto работать с IE9+ (или хотя бы с 10).
Я так и предполагал что то, что я спросил - невозможно. Хотел удостовериться.
Придется переделывать на объектах. В принципе коллекции и должны представлять из себя объекты, а не массивы. Так что это изначально ошибка архитектуры. Проблема в том, что потеряется обратная совместимость.

Всем спасибо.
Ответить с цитированием
  #20 (permalink)  
Старый 28.03.2013, 11:14
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

а я вот так и не понял чо ему надо...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать массив функций (?) venzh jQuery 1 02.02.2012 06:11
Как создать массив из картинок KamalovRadik Firefox/Mozilla 17 04.10.2011 14:06
Создать массив не содержащие данные другого масива KamalovRadik Общие вопросы Javascript 1 05.09.2011 03:30
Подскажите код как создать эффект... lopraeph Элементы интерфейса 1 09.06.2011 20:18
как создать елемент с вложеными елементами scuter Events/DOM/Window 11 14.05.2008 16:15