关于在JavaScript中创建对象的问题

时间:2011-03-25 12:54:40

标签: javascript

我了解到你可以用这种方式创建自己的“课堂”:

function Person(name, age){
    this.name = name;
    this.age  = age;
}

Person.prototype.foo = function(){
    // do something
}

Person.prototype.foo2 = function(){
    // do something
}

var wong2 = new Person("wong2", "20");

现在,如果foofoo2都需要调用另一个名为foo3的函数,我应该将其添加到哪里? 我不希望foo3调用wong2,所以我不能只使用

Person.prototype.foo3 = function(){
    // something else else
}

但如果我在全球范围内定义它,我认为它不是很好。有什么建议吗?

5 个答案:

答案 0 :(得分:4)

你可以在foo1和foo2有权访问的闭包内定义foo3,比如

function() {
    function foo3() { ... }
    Person.prototype.foo = function(){
       foo3();
    }

    ...

}();

答案 1 :(得分:2)

尝试查看有关thisPrivate Members in JavaScript SO问题和文章。

答案 2 :(得分:0)

不知道这是否正是您所寻找的,但这可以作为静态函数。

Person.foo3 = function() {
    // something else else else but not inherited by wong2
}

答案 3 :(得分:0)

为什么不创建自己的命名空间?试试

var person = {}; 
person.createPerson=function (name,age){
   this.name=name; 
   this.age=age; 
   if (age<18){
     this.status = 'cannot Marry';
   }else{
     person.addMarriageStatus('married');
   }
}
person.addMarriageStatus = function(status){this.status=status};
person.createPerson('Jack',2);
//person

答案 4 :(得分:0)

我得到的印象是你想要的东西,比如静态函数,其中foo3属于Person,但不属于wong2,当然也不属于全局范围。

如果是这样,只需将功能分配给Person.foo3,如下所示。

http://jsfiddle.net/audLd/1/

function Person(name, age){
    this.name = name;
    this.age  = age;       
}

Person.foo3 = function() {return 10;};

Person.prototype.foo = function(){
    return Person.foo3();
}

Person.prototype.foo2 = function(){
    return Person.foo3()*2;
}

var wong2 = new Person("wong2", "20");

alert("" + wong2.foo() + ", " + wong2.foo2()); //works

alert("" + Person.foo3()); //works.  this is the distinction between what I'm loosely calling static and private

alert(foo3()); //doesnt work
alert(wong2.foo3()); //doesnt work

如果你想要一个'私人'成员通过封闭,那么这是一个完全不同的动物。