У меня есть некоторый простой код OO, я записал, что играю с:
//define a constructor function
function person(name, sex) {
this.name = name;
this.sex = sex;
}
//now define some instance methods
person.prototype.returnName = function() {
alert(this.name);
}
person.prototype.returnSex = function() {
return this.sex;
}
person.prototype.talk = function(sentence) {
return this.name + ' says ' + sentence;
}
//another constructor
function worker(name, sex, job, skills) {
this.name = name;
this.sex = sex;
this.job = job;
this.skills = skills;
}
//now for some inheritance - inherit only the reusable methods in the person prototype
//Use a temporary constructor to stop any child overwriting the parent prototype
var f = function() {};
f.prototype = person.prototype;
worker.prototype = new f();
worker.prototype.constructor = worker;
var person = new person('james', 'male');
person.returnName();
var hrTeamMember = new worker('kate', 'female', 'human resources', 'talking');
hrTeamMember.returnName();
alert(hrTeamMember.talk('I like to take a lot'));
Теперь это - все хорошо и хороший. Но я смущен. Я хочу включать пространство имен как часть моей практики записи кода. Как может я пространство имен вышеупомянутый код. Поскольку это теперь, у меня есть 2 функции, определяемых в глобальном пространстве имен.
Единственным путем я могу думать, чтобы сделать, это должно переключиться на синтаксис литерала объектов. Но затем как я реализую псевдоклассический стиль выше с литералами объектов.
Например, вы можете сделать следующее:
var YourObject;
if (!YourObject) {
YourObject = {};
YourObject.Person = function(name, sex) {
// ...
}
YourObject.Person.prototype.returnName = function() {
// ...
}
// ...
}
Вам не обязательно использовать объектные литералы, по крайней мере, не исключительно.
Все ваши объявления работают в анонимной функции, и явно прикрепляют «общедоступные» методы по желанию к вашему глобальному объекту:
(function (global) {
// все такое
global.elduderino = {};
global.elduderino.person = человек;
global.elduderino.worker = worker;
})(это);
Возможно, я не совсем понимаю нюансы вашей проблемы здесь, но я пытаюсь подчеркнуть, что Javascript позволяет вам начать с того, что ваши символы будут «скрыты» как локальные в функции, но они могут быть выборочно «экспортированы» различными способами.