问题描述
我喜欢如下所述返回构造函数的模块图案: http://elegantcode.com/2011/2011/02/15/basic-javascript-part-10-the-module-pattern/
但是,我不确定如何从使用此模式实现的对象继承.假设我有一个父对象因此...
namespace('MINE'); MINE.parent = (function() { // private funcs and vars here // Public API - constructor var Parent = function (coords) { // ...do constructor stuff here }; // Public API - prototype Parent.prototype = { constructor: Parent, func1: function () { ... }, func2: function () { ... } } return Parent; }());
如何定义一个也使用从parent继承的模块模式的子对象,以使我可以选择性地覆盖,例如func2?
推荐答案
MINE.child = (function () { var Child = function (coords) { Parent.call(this, arguments); } Child.prototype = Object.create(Parent.prototype); Child.prototype.constructor = Child; Child.prototype.func2 = function () { ... }; return Child; }());
其他推荐答案
我从此博客中找到解决方案( http://metaduck.com/08-Module-Pattern-hersheritance.html )清洁剂.例如:
function Parent(name) { // Private variables here var myName; // Constructor myName = name; // Public interface return { func1: function () {alert("Parent func1. Name: " + myName); }, func2: function () {alert("Parent func2. Name: " + myName); } } } function Child(name) { // Private variables here var myName, exportObj; // Constructor // Inherit exportObj = Parent(name + "'s father"); // Override exportObj.func2 = function () { alert("Child func2. Name: " + name); } // Export public interface return exportObj; }
可以在此处运行一个示例: http://jsfiddle.net/wt4wculc/
问题描述
I like the module pattern that returns constructors as described in: http://elegantcode.com/2011/02/15/basic-javascript-part-10-the-module-pattern/
However I am not sure how to inherit from an object that is implemented with this pattern. Suppose I have a parent object implemented thus...
namespace('MINE'); MINE.parent = (function() { // private funcs and vars here // Public API - constructor var Parent = function (coords) { // ...do constructor stuff here }; // Public API - prototype Parent.prototype = { constructor: Parent, func1: function () { ... }, func2: function () { ... } } return Parent; }());
How do I define a child object that also uses the module pattern that inherits from parent in such a way that I can selectively override, for example, func2?
推荐答案
MINE.child = (function () { var Child = function (coords) { Parent.call(this, arguments); } Child.prototype = Object.create(Parent.prototype); Child.prototype.constructor = Child; Child.prototype.func2 = function () { ... }; return Child; }());
其他推荐答案
I find the solution from this blog (http://metaduck.com/08-module-pattern-inheritance.html) cleaner. For example:
function Parent(name) { // Private variables here var myName; // Constructor myName = name; // Public interface return { func1: function () {alert("Parent func1. Name: " + myName); }, func2: function () {alert("Parent func2. Name: " + myName); } } } function Child(name) { // Private variables here var myName, exportObj; // Constructor // Inherit exportObj = Parent(name + "'s father"); // Override exportObj.func2 = function () { alert("Child func2. Name: " + name); } // Export public interface return exportObj; }
An example can be run here: http://jsfiddle.net/wt4wcuLc/