1

我在 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在这个命名空间中创建一个包含两个构造函数的命名空间,WebPage并且Home. WebPage是“超类型”并且Home是“子类型”。Home 应该继承 WebPage 的所有内容。

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

为什么?

谢谢您的帮助!!!

4

2 回答 2

2

似乎您在某些时候混淆了超类和子类(在调用或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;
}

希望这是你想要的。

于 2012-12-31T03:31:31.997 回答
1

这是 jsfiddle 中的一个工作示例,基于您在上面尝试执行的操作:

http://jsfiddle.net/8GwRd/

var App = (function() {
    function WebPage(name) {
        this.type = 'WebPage';
        this.name = name;
    }

    WebPage.prototype.sayName = function() {
      alert(this.name + ' is a ' + this.type);
    };

    function Home(name) {
        WebPage.call(this, name);
        this.type = 'Home'
    }

    Home.prototype = new WebPage();

    return {
        WebPage: WebPage,
        Home: Home
    };       

})();

var y = new App.WebPage('bob');
y.sayName();

var x = new App.Home("zack");
x.sayName();
于 2012-12-31T03:38:54.943 回答