【发布时间】:2013-08-14 00:52:30
【问题描述】:
好的,我已经修改了大多数在 JavaScript OOP 中实现继承的技术。
作为一名 Java 程序员,我对 classical 方法很感兴趣,但这就是问题所在;说我想创建Animal 类(我知道它不是一个真正的类,但让我使用这个术语)如下:
function Animal(name){
this.name = name;
}
Animal.prototype.getName = function() {
return this.name;
}
重要的是要注意,这是一个具体的类,我想实例化它,而不仅仅是将它用作超类。我可以创建几个Animal 实例,每个实例都有自己的名称。
扩展此类的一种可能方法是执行以下操作:
function Cat(name, owner) {
this.name = name;
this.owner = owner;
}
// ALTERNATIVE 1:
Cat.prototype = Object.create(Animal.prototype);
// ALTERNATIVE 2:
Cat.prototype = new Animal('LOLA');
// END OF ALTERNATIVES
Cat.constructor.prototype = Cat;
Cat.prototype.jump = function() {
alert(this.name + " jumping");
}
ALTERNATIVE 1我们只是继承了超类的方法,实际上我们需要重新定义Cat中的name属性。对于ALTERNATIVE 2,实际上并没有什么变化,我们只是在链中多了一个对象,它拥有一个非常没用的name 属性:它对于所有Cat 实例都是一样的。
这里的重点是我已经用自己的名字编写了Animal 类,我一扩展它就扔掉它。我想要的是一种继承属性和方法的方法,最重要的是,我希望能够重用 Animal 构造函数。
【问题讨论】:
-
如果某些外星文明曾经挖掘过 Stack Overflow 数据库,他们会认为 JavaScript 专门用于对动物进行分类。
-
在 Cat 函数体中,您通常调用
Animal.call(this,name);从 Animal 获取实例属性。更多关于 JS 中的基本构造函数(再次使用动物):stackoverflow.com/questions/16063394/…
标签: javascript oop inheritance