Как я могу пространство имен псевдоклассической Javascript - PullRequest
1 голос
/ 09 августа 2010

У меня есть простой 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 функции, определенные в глобальном пространстве имен.

Единственный способ, которым я могу думать, это переключиться на синтаксис литерала объекта.Но тогда как мне реализовать описанный выше псевдоклассический стиль с помощью литералов объектов.

Ответы [ 2 ]

1 голос
/ 09 августа 2010

Вам не обязательно использовать объектные литералы, по крайней мере, не исключительно.

  1. Выберите один глобальный символ, который вы хотели бы использовать.
  2. Все ваши объявления работают в анонимной функции, и явно присоединяет "публичные" методы в соответствии с вашими глобальными объектами:

    (function(global) {
       // all that stuff
    
       global.elduderino = {};
       global.elduderino.person = person;
       global.elduderino.worker = worker;
    })(this);
    

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

1 голос
/ 09 августа 2010

Например, вы можете сделать следующее:

var YourObject;
if (!YourObject) {
  YourObject = {};

  YourObject.Person = function(name, sex) {
    // ...
  } 

  YourObject.Person.prototype.returnName = function() {
    // ...
  }

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