переменная [свойство] совпадает с точечной нотацией, поэтому вы делаете MyArray.2, которая является переменной, а не методом, который оценивается. В действительности вы не можете делать то, что хотите, без метода, который изменяет свойство, когда оно назначено, или метода, который вычисляет правильное значение, когда вы его извлекаете.
И нет, вы не можете переопределить [], это просто точечная запись, это не совсем индекс, который вы можете переопределить
Re: ваш комментарий, Абсолютно, вы можете сделать
var x = new Array();
x[1] = function () { alert('x') };
var myFunction = x[1];
x[1](); // alerts "x"
myFunction(); // alerts "x"
alert(x[1]); // alerts "function () { alert('x') };"
alert(myFunction); // alerts "function () { alert('x') };"