JavaScript 命名空间和继承

标签 javascript prototypal-inheritance

我在 jsFiddle 中有一些代码:http://jsfiddle.net/xyuY6/

还有代码:

var App= {};

App.WebPage = {
 WebPage : function(name) {
     alert("In Super");
     this.name = name;  
 },

 Home : function(name) {
      alert("In Sub");
      App.WebPage.WebPage.call(this, name);
 }


};

App.WebPage.WebPage.prototype.sayName = function() {
alert(this.name);
};

inherit(App.WebPage.WebPage, App.WebPage.Home);

var x = new App.WebPage.Home("zack");
x.sayName();

function inherit(subType, superType) {
    alert("IN HERE");
    var p = Object.create(superType);
    p.constructor = subType;
    subType.prototype = p;
}

我想做的是创建一个 App 命名空间,在这个命名空间中有两个构造函数,WebPageHomeWebPage 是“父类(super class)型”,Home 是“子类型”。 Home 应该继承 WebPage 的所有内容。

但问题是,正如您在运行 JavaScript 时会看到的那样,当我执行 x.sayName 时,WebPage 原型(prototype)上定义的 sayName 函数没有被调用。因此,它不会被继承。

为什么?

感谢帮助!!!

最佳答案

似乎您在某个时候混淆了父类(super class)和子类(在调用中或在 inherit 的定义中)...

这是固定代码(如果我明白你想做什么的话):http://jsfiddle.net/45uLT/

var App= {};

App.WebPage = {
     WebPage : function(name) {
         alert("In Super");
         this.name = name;  
     },

     Home : function(name) {
          alert("In Sub");
          App.WebPage.WebPage.call(this, name);
     }


};


App.WebPage.WebPage.prototype.sayName = function() {
    alert(this.name);
};

inherit(App.WebPage.WebPage, App.WebPage.Home);

var x = new App.WebPage.Home("zack");
x.sayName();

function inherit(superType, subType) {
    alert("IN HERE");
    var p = new superType;
    subType.prototype = p;
    subType.prototype.constructor = subType;
}

希望这就是您想要的。

关于JavaScript 命名空间和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14097048/

相关文章:

javascript - JS : why do i need brackets to call a method on number?

javascript - 通过将 __proto__ 放入原型(prototype)来在 JavaScript 中继承是不是很糟糕?

javascript - 更改图标以在angularjs中展开折叠

javascript - JQuery 使用传递的参数值通过 $(document).ready 初始化页面

javascript - 正则表达式查找方括号包围的单个单词

javascript - JavaScript 中的基本/高效原型(prototype)继承?

Javascript 继承重写

javascript - 使用 $http 刷新来自服务的数据时, Angular View 不更新

Javascript 对象枚举

javascript - 使用函数构造函数的原型(prototype)添加新函数