我如何命名伪古典javascript

时间:2010-08-09 11:52:15

标签: javascript oop

我有一些简单的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 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

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

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

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

  // ...
}

答案 1 :(得分:1)

您不必使用对象文字,至少不是唯一的。

  1. 决定您要使用的单个全局符号。
  2. 在匿名函数中完成所有声明工作,显式根据需要将“public”方法附加到全局对象:

    (function(global) {
       // all that stuff
    
       global.elduderino = {};
       global.elduderino.person = person;
       global.elduderino.worker = worker;
    })(this);
    
  3. 我可能不完全理解你的问题的细微差别,但我想说的是,Javascript使你可以开始将你的符号“隐藏”为函数中的本地人,但是可以通过各种方式有选择地“输出”。