Чтобы перезаписать метод, означает, что всякий раз, когда метод вызывается на объекте производного класса, вызывается новая реализация.
Чтобы скрыть метод, означает, что неквалифицированный вызов этого имени в область действия этого класса (т. е. в теле любого из его методов или при наличии имени этого класса) теперь вызовет совершенно другую функцию, , требующую квалификации для доступа к статическому методу с тем же именем из родительский класс .
Подробнее Наследование Java: перезаписанные или скрытые методы
Простой:
if(!MyNamespace) MyNamespace = {};
MyNamespace.foo = function() {
this.length = 0;
};
MyNamespace.foo.prototype.getLength = function() {
return this.length;
};
JavaScript действительно не имеет пространства имен или пакетов как другие языки. Вместо этого это имеет закрытия. Если у Вас есть приложение, которое состоит из нескольких функций, переменных и объектов, то необходимо поместить их в единственном глобальном объекте. Это будет иметь тот же эффект как пространство имен.
Например:
var namespace = {
this.foo: function(){
...
},
this.foo.prototype.getLength: function(){
...
}
}
Вы могли также создать ряд вложенных объектов и моделировать пакеты:
loadPackage = function(){
var path = arguments[0];
for(var i=1; i<arguments.length; i++){
if(!path[arguments[i]]){
path[arguments[i]] = {};
}
path = path[arguments[i]];
}
return path;
}
loadPackage(this, "com", "google", "mail") = {
username: "gundersen",
login: function(password){
...
}
}
this.com.google.mail.login("mySecretPassword");
Не должно очень отличаться:
namespace.foo = function foo() {...}
namespace.foo.prototype.getLength = function() { ... }
или Вы могли использовать
(function() {
function foo() { ... }
foo.prototype...
namespace.foo = foo;
})();
сохранить некоторый ввод.
Оба ответа были очень полезны! Вот то, с чем я закончил:
if( typeof( rpNameSpace ) == "undefined" ) rpNameSpace = {};
rpNameSpace.foo = function() {
this.length = 613;
}
rpNameSpace.foo.prototype.getLength = function() {
return this.length * 2;
}
Затем для использования получающегося объекта "namespaced":
var x = new rpNameSpace.foo()
display( x.getLength() );