JavaScript 中的标准原型继承如下:
function Animal() {
this.legs = 0;
}
Animal.prototype.move = function () {
alert("I'm moving!");
}
Bird.prototype = new Animal();
Bird.prototype.constructor = Bird;
function Bird() {
this.legs = 2;
this.wings = 2;
}
Bird.prototype.move = function () {
alert("I'm flying!");
}
Bird的函数定义是否必须在Bird的原型和构造函数的赋值之后。我问这个是因为我试图从命名空间中执行此操作,而变量提升导致我的代码失败。举个例子:
var namespace = {};
namespace.Animal = function () {
this.legs = 0;
};
namespace.Animal.prototype.move = function () {
alert("I'm moving!");
};
namespace.Bird.prototype = new namespace.Animal();
namespace.Bird.prototype.constructor = namespace.Bird;
namespace.Bird = function () {
this.legs = 2;
this.wings = 2;
};
namespace.Bird.prototype.move = function () {
alert("I'm flying!");
};
由于提升了 namespace.Bird.prototype 赋值语句和 namespace.Bird.prototype.constructor 赋值语句失败。但是,如果我将 namespace.Bird 函数分配移动到这两行之上,如以下代码块所示,则代码似乎可以工作。
namespace.Bird = function () {
this.legs = 2;
this.wings = 2;
};
namespace.Bird.prototype = new namespace.Animal();
namespace.Bird.prototype.constructor = namespace.Bird;
但是,我不知道是否有特定原因导致大多数资源显示原始顺序而不是首先进行功能分配。
有人可以澄清一下吗?
谢谢!