Классы JavaScript, которые нельзя разделить на подклассы - PullRequest
1 голос
/ 10 октября 2009

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

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

Ответы [ 3 ]

7 голосов
/ 10 октября 2009

Парадигма JavaScript Object Oriented - на основе прототипа , что означает, что объекты "наследуют" от других объектов, используя их в качестве прототипа.

Классов нет, Car - это функция конструктора , а язык позволяет расширять практически любой любой объект.

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

1 голос
/ 10 октября 2009

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

  1. На динамическом языке с поддержкой метаклассов можно было бы реализовать такую ​​функцию. JavaScript не такой язык.
0 голосов
/ 11 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...