【发布时间】:2016-09-21 17:20:15
【问题描述】:
我正在尝试处理 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);
控制台输出:子类 dance -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);
控制台输出:子类 dance -5 -4
控制台输出:错误:failure.move 不是函数
【问题讨论】:
-
我建议阅读this page on MDN。你不应该需要所有的
Classes/Subclass/Superclass东西...... -
所以我的问题归结为
Subclass.prototype.dance = function(x, y){};和Subclass.prototype = {dance:function(){}};之间的区别是什么?
标签: javascript function inheritance prototype