Hi!
Не приятная фишка

Все браузеры дают одно, так что это фишка а не баг...
может кто-нибудь объяснить вывод этого скрипта?
<script>
function cl(x){
alert(this.i[0]+','+this.j[0]);
this.i.push(x);
}
cl.prototype={
i:[],
j:[0]
}
var a=new cl(1);
var b=new cl(2);
</script>
undefined,0
1,0
Обнаружил чисто случайно. после того как раз 20 все переписал с нуля, увершал все что можно затычками и пр. Очень забавно получилось — управляешь одним объектом, а реагирует другой

только по тому и нашел.
Попутно задам вопрос: вы как пишите (если пишите много)?
// 1 (-) очень много писанины, довольно слепо
// (-) конструктор создает все поля объекта, а не берет готовый объект и инициализирует его.
function cl(){
this.a=0;
this.f=f;
// объявили все поля в начале, потом конструктор и вложенные функции
function f(){}
}
// 2 (-) ни хрена не понятно :) но чаще всего именно так
function cl(){
this.a=0;
// где надо там и создали поле
this.f=function(){}
}
// 3 (+) минимум писанины, предельно структурированно и понятно
// (-) debuger часто не может поставить breakpoint на середину функции f() (получается на весть cl.prototype=...)
// (-) в debuger в стеке вызовов надписи про анонимную функцию, а не ее имя.
// (-) пока это туго понимают редакторы
// (?) если бы ни штука о которой я писал выше, то так бы было удобнее всего. а так - прийдется переписывать 60кб убористого кода 15 классов... :crash:
function cl(){ this._construct(); }
cl.prototype={
a:0;
f:function(){}
}