• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Class Free Object Oriented JS

Lomanu4 Оффлайн

Lomanu4

Команда форума
Администратор
Регистрация
1 Мар 2015
Сообщения
1,481
Баллы
155
An example of Class Free Object Oriented (CFOO) JS-code.


The last years my JS contains almost exclusively

Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

(actually the revealing module pattern). It's a very elegant and relative simple and robust way to create 'constructors' without the need for this or class syntax (aka class sugar). I'd like to share the idea here.

Constructors are created using factory functions, which return frozen objects. Factory functions may include ('inherit') other factory instances. Variable privacy is guaranteed via closures.

The basic pattern is (note: variables/types are not checked here)


const helloWorld = myConstructorFactory(myOtherConstructorFactory());
const universe = helloWorld("universe");

console.log(String(universe));
// 'hello world'
console.log(String(universe.setWorld("universe")));
// 'hello universe'
console.log(String(universe.setHello("Hi")));
// 'Hi universe'
console.log(universe.name);
// 'universe'

universe.name = "nothing";
// TypeError: Cannot set property name of [object Object]
// which has only a getter
universe.instanceName = "nothing";
// TypeError: Cannot add property instanceName, object is not extensible

function myConstructorFactory(inherits) {
let {hello, world} = inherits;

return function(instanceName) {
const instance = {
get name() { return instanceName; },
toString() {return hello + " " + world; },
setWorld(value) { world = value; return instance; },
setHello(value) { hello = value; return instance; }
};

return Object.freeze(instance);
}
}

function myOtherConstructorFactory(hi, wrld) {
return Object.freeze( {
hello: hi || "hello",
world: wrld || "world" } );
}
A more extensive example:


I created a simple, but more complete example @ stackblitz. Feel free to tinker with it.


Пожалуйста Авторизируйтесь или Зарегистрируйтесь для просмотра скрытого текста.

 
Вверх Снизу