2013-09-01 8 views
1

Я создаю JavaScript Framework для приложений в классическом объектно-ориентированном программировании (так что с классами/интерфейсами, а не только с прототипами). Однако у меня все еще есть проблема с предоставлением им имен.Класс, интерфейс, прототип, и еще

Например:

var Bidule = function() { /*...*/ } ; 
Bidule.prototype = { /*...*/ } ; 

Является Bidule OOP Класс как класс является конструктором? Или это только конструктор? Поскольку у классов нет прототипов, я не думаю, что его можно было бы назвать истинным классом.

Это значит, что я должен назвать их обоими конструкторами. Однако, что относительно интерфейса или абстрактного класса? Какое правильное слово, если они не являются конструкторами? А интерфейс - это своего рода класс?

Я разработал функции, классы и интерфейсы конструктора в моей Framework. Однако мне нужно имя, чтобы перегруппировать все темы таким образом, мы можем построить один из тех, кто так:

var Bidule = new _NAME_.Class(/*...*/) ; // Where _NAME_ is the name of the container of class/function/interface. 

Я думал о «Концепции», но я не уверен и хотел бы знать Ваше мнение.


Я также назвал «видимостью» общим слово для описания открытого/закрытого класса, «типа» для статического/абстрактном/интерфейса/одноплодного/конечного класса. Правильны ли они?


И один последний вопрос: Есть ли разница между глаголом «расширения» и «наследуют»?

Заранее благодарим за ответы.

ответ

1

Javascript не является традиционным языком OO, он прототипирован. По этой причине некоторые понятия об OO не могут быть применены к js.

Bidule Ваш тип, так что это ваш «класс». Конструктор - это функция , которую вы указали в переменной.

var Bidule = function() { /*...*/ } ; 
Bidule.prototype = { /*...*/ } ; 

var obj = new Bidule(); 
obj.foo = 'bar'; 

var obj2 = new Bidule(); 
obj2.foo = 'foo'; 

alert(obj instanceof Bidule); // true 
alert(obj2 instanceof Bidule); // true 
alert(obj.foo); // bar 
alert(obj2.foo); // foo 

Javascript не поддерживает абстрактные классы или интерфейсы и нет, интерфейсы не являются своего рода классами. Интерфейсы определяют контракты, или что ваш класс делает, но не указывать как.

Расширение и наследование имеют такое же значение в этом контексте.

+0

Благодарим вас за все эти ответы. Так что, если 'Bidule' является типом, как я должен называть« static/abstract/interface/singleton/final »? "_трибуты_" класса? – Tot

+0

Конечные, статические и абстрактные - ** модификаторы ** класса. Интерфейс - это ** контракт **, который класс будет подписывать при его реализации. Синглтон - это шаблон ** дизайна **, который предоставляет единый экземпляр объекта для всего приложения. –

+0

Уверен, это просто, что одним ключом я могу переключиться на одно из этих пяти слов. Но ты ответил на мой вопрос. :) Еще раз спасибо ! – Tot

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