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;
}

私がやろうとしているのは、この名前空間に 2 つのコンストラクターを持つ名前空間を作成することAppです。「スーパータイプ」と「サブタイプ」です。Home は WebPage からすべてを継承する必要があります。WebPageHomeWebPageHome

ただし、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 に答える