2016-10-16 4 views
0

Я смотрел на игровую площадку Typescript и увидел это объявление класса:Должен ли я всегда запускать функцию, которая работает как класс в javascript (ES5)?

class Greeter { 
    greeting: string; 
    constructor(message: string) { 
     this.greeting = message; 
    } 
    greet() { 
     return "Hello, " + this.greeting; 
    } 
} 

конвертированы в этот ES5 код:

var Greeter = (function() { 
    function Greeter(message) { 
     this.greeting = message; 
    } 
    Greeter.prototype.greet = function() { 
     return "Hello, " + this.greeting; 
    }; 
    return Greeter; 
}()); 

В ECMAScript5 я всегда нужно запустить функцию, которая работает как класс? или это потому, что protoype.greet находится внутри этой анонимной функции?

+1

нет, но это хорошая идея, чтобы инкапсулировать объект-прототип, чтобы упростить его чтение, и вы можете иметь частное состояние и помощники, если они необходимы. – synthet1c

+0

Нет. Вам вообще не нужно использовать IIFE, даже если вы играете с прототипом конструктора. – Redu

ответ

1

От MDN:

классы JavaScript, введенные в ECMAScript 6 являются синтаксический сахар по сравнению с существующими на базе прототипа наследования в JavaScript. Синтаксис класса не представляет для JavaScript новую объектно-ориентированную модель наследования. Классы JavaScript обеспечивают гораздо более простой и понятный синтаксис для создания объектов и работы с наследованием.

Так что да. Вам всегда нужно запустить функцию, которая работает как класс.

+1

Я думаю, что они говорят о закрытии вокруг класса es5 – synthet1c