我在 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
是“父类(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/