Я пытаюсь понять прототипное наследование в Javascript, но не могу применить его к следующему случаю. Любая помощь будет оценена по достоинству.
Я определяю конструктор следующим образом:
var base = function() {
var priv = "private"; // Private
var publ = "public"; // Public through a getter/setter (below)
// The object to return
var f = {};
f.publ = function (new_val) {
if (!arguments.length) {
return publ;
}
publ = new_val;
return f;
};
return f;
};
С помощью этого конструктора я могу создавать объекты, вызывая base();
. Эти объекты имеют публичный метод (publ).
Теперь, следуя той же структуре, я хотел бы иметь новый конструктор, который создает объекты, наследуемые от объектов, созданных «базовым конструктором», определенным выше:
var myclass = function () {
// Other parameters defined here
var f = function () {
// publ is inherited
console.log(f.publ());
};
// Trying to set the prototype of f to the object created by "base()"
f.prototype = base();
// Other methods defined here
return f;
};
С помощью f.prototype = base();
я хочу, чтобы f наследовал все методы, определенные в объекте, возвращаемом base()
, но попытка вызвать f.publ жалуется, потому что f не имеет метода publ
Любая помощь в понимании того, что происходит, будет приветствоваться
M;
new
илиObject.create
. Вы не используете здесь ни того, ни другого. - person Eric   schedule 09.02.2014new
. Это больше похоже на шаблон модуля. - person elclanrs   schedule 09.02.2014