Я смотрел разговор Дугласа Крокфорда о хороших частях в Javascript и мои глаза были открыты. В какой-то момент он сказал, что-то вроде: "Javascript - это единственный язык, на котором хорошие программисты считают, что могут эффективно использовать его, не изучая его". Тогда я понял, что я тот парень.
В этом разговоре он сделал несколько заявлений, которые для меня были довольно неожиданными и проницательными. Например, JavaScript является самым важным языком программирования на планете. Или это самый популярный язык на планете. И, что он разбит многими серьезными способами.
Самое удивительное выражение, которое он сделал для меня, было "новым опасным". Он больше не использует его. Он не использует this
.
Он представил интересный шаблон для конструктора в Javascript, который позволяет использовать частные и общедоступные переменные-члены и не использует ни new
, ни this
. Это выглядит так:
// neo-classical constructor
var container = function(initialParam) {
var instance = {}; // empty object
// private members
var privateField_Value = 0;
var privateField_Name = "default";
var privateMethod_M1 = function (a,b,c) {
// arbitrary
};
// initialParam is optional
if (typeof initialParam !== "undefined") {
privateField_Name= initialParam;
}
// public members
instance.publicMethod = function(a, b, c) {
// because of closures,
// can call private methods or
// access private fields here.
};
instance.setValue = function(v) {
privateField_Value = v;
};
instance.toString = function(){
return "container(v='" + privateField_Value + "', n='" + privateField_Name + "')";
};
return instance;
}
// usage
var a = container("Wallaby");
WScript.echo(a.toString());
a.setValue(42);
WScript.echo(a.toString());
var b = container();
WScript.echo(b.toString());
EDIT: обновлен код для переключения на имя нижнего регистра.
Этот шаблон развился из ранее использовавшихся моделей Crockford.
Вопрос: Используете ли вы такой шаблон конструктора? Вы находите это понятным? У вас есть лучший?