Для чего нужно выносить переменную класса на глобальный уровень?

Для чего нужно выносить переменную класса на глобальный уровень?


(function() {
	function Slider() {
	// some code ......
	}

	// ??????
	window.Slider = Slider;
}());

Почему необходимо такое присвоение Wolf.prototype.constructor = Wolf;

function Animal() {
	this.name = 'Animal';
	this.sayHello = function() {
		console.log('hello ' + this.name);
	}
}

function Wolf() {
	this.name = 'Wolf';
}

Wolf.prototype = new Animal();

//??????
Wolf.prototype.constructor = Wolf;

Добрый вечер.

Для чего нужно выносить переменную класса на глобальный уровень?

Что бы в области видимости была ссылка на конструктор (что бы не засорять область видимости) - модульный подход.

Почему необходимо такое присвоение Wolf.prototype.constructor = Wolf;

Стефан Стоянов в своей книге “JavaScript шаблоны”, описывает данный способ “Классического наследования (ООП)”. Это еще один подход к разработке. Подробнее можно прочитать в выше приведенной книге в главе 6 “Шаблоны повторного использования программного кода” - “Классический шаблон №3: заимствование и установка прототипа”.
ссылка на книгу: JavaScript. Шаблоны

1 лайк

Думаю что автор сделал так чтобы мочь использовать класс Slider из других js файлов страницы. Считай, вынес переменную на глобальный уровень.
Задачу использования класса в одном модуле из другого решуют с помощью commonjs модулей и системы сборки (webpack, browserify и другие). Автор мог не воспользоваться потому что поленился настраивать сборку проекта или потому что не знал что так можно. В случае с модулями использование Slider из модуля выглядело бы так:

// slider.js

function Slider() {}
exports.Slider = Slider

// index.js
var Slider = require('./slider.js')

В коде автор хотел наследовать класс Wolf от класса Animal (т.е. сделать так чтобы все методы и свойства Animal были доступны в Wolf. Так как до es5 не было стандартного синтаксиса создания классов и наследования, автор выбрал один из вариантов наследования, побочным эффектом которого есть нарушение цепочки прототипов (подробнее про механизмы наследования можно глянуть тут: Прототипное наследование). Строка Wolf.prototype.constructor = Wolf; восстанавливает цепочку прототипов.

1 лайк