我了解到你可以用这种方式创建自己的“课堂”:
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");
现在,如果foo
和foo2
都需要调用另一个名为foo3
的函数,我应该将其添加到哪里?
我不希望foo3
调用wong2
,所以我不能只使用
Person.prototype.foo3 = function(){
// something else else
}
但如果我在全球范围内定义它,我认为它不是很好。有什么建议吗?
答案 0 :(得分:4)
你可以在foo1和foo2有权访问的闭包内定义foo3,比如
function() {
function foo3() { ... }
Person.prototype.foo = function(){
foo3();
}
...
}();
答案 1 :(得分:2)
尝试查看有关this的Private 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
,如下所示。
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
如果你想要一个'私人'成员通过封闭,那么这是一个完全不同的动物。