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__