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

Aetae
function MyArray () {}
MyArray.prototype = Array.prototype;
MyArray.prototype.myFunction = function () {
    return this[0] + this[1]
}
  
var myArray = new MyArray()

// во-первых мы изменили прототип Array, но это решаемо
alert( typeof [].myFunction )

// во-вторых, мы получили таки объект, а не массив
alert( Array.isArray(myArray) )
alert( Object.prototype.toString.call(myArray) )


А должно быть так:
function MyArray () {
    var instance = []
    instance.__proto__ = arguments.callee.prototype
    return instance
}
MyArray.prototype.myFunction = function () {}
 
var myArray = new MyArray()

alert( typeof [].myFunction )
alert( Array.isArray(myArray) )
alert( Object.prototype.toString.call(myArray) )


Зачем это? Пытаюсь заставить библиотеку Zepto работать с IE. А там как раз использется массив, а не объект.
Да и вообще интересно - возможно ли так сделать без __proto__
Ответить с цитированием