Обычно я использую этот узор, который я не видел много. Я делаю это, чтобы не прикасаться к моим методам каким-либо особым образом. Если все открыто, то обычно необходимо обеспечить, чтобы вызванные методы были объявлены до вызова метода.
var person = new Person("Mo", "Yo");
person.getFullname();
person.getFirstname();
person.getLastname();
function Person(firstname, lastname) {
var firstname, lastname;
(function constructor(){
setFirstname(firstname);
setLastname(lastname)
})();
this.getFullname = getFullname; // Makes getFullName() public
function getFullname() {
// Will allow you to order method in whatever order you want.
// If we where to have it as just this.getFullname = function() {...} and same for firstname
// as it is normally done, then this.getFirstname would have to be placed before this method.
// A common pain in the ass, that you cannot order methods as you want!
return getFirstname() + ", " + getLastname();
}
this.getFirstname = getFirstname;
function getFirstname() {
return firstname;
}
function setFirstname(name){
firstname = name;
}
this.getLastname = getLastname;
function getLastname() {
return lastname;
}
function setLastname(name) {
lastname = name;
}
}
Для вашей личной функции я бы предпочел 'function pri() {blah; } 'вместо использования объявления' var'. – Pointy
Эта «частная» концепция действительно не такая же, как на других языках. В основном бесполезно пытаться сопоставить семантику наследования C++, Java, C# и т. Д. С тем, что предоставляет JavaScript. Они принципиально разные. – Pointy