Можно вас попросить почитать комментарии в коде? Я всё правильно понял?
(function (window) { //Window можно и не передавать, но тогда к нему нельзя будет обратится в локальных функциях
//Здесь можем записывать публичные переменные, window === this в данном случае
window.foo = 2;
this.bar = 3;
//Также можем создавать "статические" переменные, вешая их непосредственно на функцию
Ball.STATIC_VAR = "staticVar";
//Здесь можем записывать "приватные" переменные, которые нужны для функционирования данного класса, но не должны попасть в global
var ballName; // Данная переменная будет доступна только для функций данной области видимости
var ballSize = 25;
//После того как функция выполнится - все переменные в этом блоке будут уничтожены
//----------------------------
function Ball(size, weight){
this.size = size;
this.weight = weight;
window.ballName2 = "Tree";
ballName = "Ball2";
this.init();
}
Ball.prototype = Object.create(Circle); //Наследуем свойства от Circle
Ball.prototype.init = function(){
console.log(ballName2);
}
window.Ball = Ball;
}(window));