2009-10-10 3 views
1

У меня есть класс JavaScript, и я хотел бы сделать так, чтобы он не подклассифицировался. (. По аналогии с маркировкой класса с «окончательным» ключевым словом в Java) Вот мой класс JavaScript:JavaScript-классы, которые нельзя подклассифицировать

function Car(make, model) { 
    this.getMake = function() { return make; } 
    this.getModel = function() { return model; } 
} 

ответ

1

Учитывая, что JavaScript не даже на самом деле есть классы (это прототип на основе объектной система, а не класс на основе одного), и что это динамический язык [1], то, что вы хотите сделать, невозможно. Кроме того, JavaScript фактически не имеет наследования/подклассификации - его нужно подделать путем копирования и расширения объектов. Нет способа (я знаю), чтобы предотвратить использование другого кода.

  1. В динамическом языке с поддержкой метакласса можно было бы реализовать такую ​​функцию. JavaScript не такой язык.
7

JavaScript объектно-ориентированная парадигма prototype based, что означает, что объекты «наследуют» от других объектов, используя их в качестве прототипа.

Там нет классов, Car является constructor function, и язык позволяет расширить любую практически любой объект.

Если вы можете создать экземпляр объекта Car, нет способа предотвратить использование этого объекта в качестве прототипа другой функции-конструктора.

0

Нет, вы не можете сделать это напрямую и не знаете, что есть способ сделать это с помощью прототипического наследования Javascript, но посмотрите на Extjs, который представляет собой структуру js, которая имеет конструкцию с тяжелым объектно-ориентированным дизайном. Посмотрите на api и, более того, исходный код, и вы можете приблизиться к тому, куда хотите, но не полностью :)

Смежные вопросы