Предпосылки: Не так давно go функции с переменными с ограниченной областью действия, действующими как частные свойства или методы, были чрезвычайно эффективным способом создания классов в JavaScript. Сегодняшние стандарты заключаются в использовании более подробного и неэффективного подхода к размеру файла с использованием prototype
и ключевого слова this
. Кроме того, современный подход менее гибкий. В коде:
class MyClass {
private myProp = "hello "; // or #myProp with new proposed syntax
private myProp2 = "World"; // or #myProp2 with new proposed syntax
print() {
console.log(this.myProp + this.myProp2);
}
}
в:
function MyClass() {
var self = this,
myProp = "hello ",
myProp2 = "World";
self.print = function() {
console.log(myProp + myProp2);
}
}
Есть предложения?
Примечание : я знаю, как JavaScript прототип работает, и что второй подход не использует его. Весь смысл этого вопроса состоит в том, чтобы найти альтернативу транспиляции шаблону прототипа, как показано выше, которое на 100% достоверно и эквивалентно типичным вариантам использования классов. Т.е. myClass.print();
.
Обновление 2 : Для тех, кто думает о занимаемой памяти, они правы. Производительность движка JavaScript не является проблемой, так как устаревшие и современные движки учитывают этот подход.
Обновление 3 : Кроме того, этот шаблон может предлагать наследование классов, public / private stati c методы, и он полностью совместим с оператором instanceof в базовом классе и родительских классах.