我想与JavaScript继承握手。我的示例代码开头是这样的:JavaScript构造函数在“子类”中,正确的符号?
var example = example || {};
example.Classes = {};
(function() {
var example = example || {};
example.Classes = {};
var privateVar = 25;
function Superclass() {
this.x = privateVar;
}
Superclass.prototype = {
move: function(x){
this.x += x;
console.log("Superclass move",this.x);
},
dance: function(x){
this.x += x*2;
}
};
function Subclass() {
Superclass.apply(this, arguments);
this.y = 0;
};
Subclass.prototype = Object.create(Superclass.prototype);
Subclass.prototype.constructor = Subclass;
这是成功的延续:
Subclass.prototype.dance = function(x, y) {
this.x -= (x + privateVar);
this.y -= y;
console.log("Subclass dance", this.x, this.y)
};
example.Classes.Superclass = Superclass;
example.Classes.Subclass = Subclass;
window.example.Classes = example.Classes;
}());
var success = new example.Classes.Subclass();
success.dance(5,4);
success.move(6);
控制台输出:子类舞蹈-5 -4
控制台输出:超类招1
而现在失败的延续 - 这里有什么不对?为什么我不能使用这种写子类构造函数的方式?
Subclass.prototype = {
dance: function(x, y) {
this.x -= (x + privateVar);
this.y -= y;
console.log("Subclass dance", this.x, this.y)
}
};
example.Classes.Superclass = Superclass;
example.Classes.Subclass = Subclass;
window.example.Classes = example.Classes;
}());
var failure = new example.Classes.Subclass();
failure.dance(5,4);
failure.move(6);
控制台输出:子类舞蹈-5 -4
控制台输出:ERROR:failure.move不是一个函数
我建议阅读[MDN上的此页面](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain)。你不应该需要所有的'Classes' /'Subclass'''' Superclass' ... –
所以我的问题归结为\t'Subclass.prototype.dance = function(x,y){ };'和 'Subclass.prototype = {dance:function(){}};'? – Daniela