- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我试图通过非常简单的示例来掌握 JavaScript 的 OOP。
我的目标是创建一个以 Animals 为例的类层次结构。
在简化的动物层次结构中,我们可能会看到这样的东西:
Animal
/\
Mammal Reptile
/\ /\
Human Dog Snake Alligator
我想拿这个例子在 JavaScript 中创建类。这是我的尝试。我该怎么做才能让它变得更好?
function Animal(name) {
this.name = name;
}
function Mammal() {
this.hasHair = true;
this.numEyes = 2;
this.blood = "warm";
}
function Dog(breed) {
this.breed = breed;
this.numLegs = 4;
}
Dog.prototype = new Animal("Fido");
Dog.prototype = new Mammal();
var Fido = new Dog("Lab");
console.log(Fido.name); // returns undefined when i want it to return Fido
console.log(Fido.hasHair); // returns true as expected
console.log(Fido.breed); // returns lab as expected
我想做的是让 dog 扩展 Mammal 和 Animal 的属性,因为它们都是,但它不能正常工作。我假设是因为我在 new Animal() 之后调用 dog.prototype = new Mammal() 它正在覆盖连接。
如何正确地写出这些类,以便我可以调用它们父类的所有属性?
谢谢。
最佳答案
您想使用原型(prototype)继承,这在 Javascript 中有点笨拙但功能强大。
function Animal(name) {
this.name = name;
}
// Example method on the Animal object
Animal.prototype.getName = function() {
return this.name;
}
function Mammal(name, hasHair) {
// Use the parent constructor and set the correct `this`
Animal.call(this, name);
this.hasHair = hasHair;
}
// Inherit the Animal prototype
Mammal.prototype = Object.create(Animal.prototype);
// Set the Mammal constructor to 'Mammal'
Mammal.prototype.constructor = Mammal;
Mammal.prototype.getHasHair = function() {
return this.hasHair;
}
function Dog(name, breed) {
// Use the parent constructor and set the correct `this`
// Assume the dog has hair
Mammal.call(this, name, true);
this.breed = breed;
}
// Inherit the Mammal prototype
Dog.prototype = Object.create(Mammal.prototype);
// Set the Dog constructor to 'Dog'
Dog.prototype.constructor = Dog;
Dog.prototype.getBreed = function() {
return this.breed;
}
var fido = new Dog('Fido', 'Lab');
fido.getName(); // 'Fido'
fido.getHasHair(); // true
fido.getBreed(); // 'Lab'
可以在 Mozilla Developer Network 上找到有关 Javascript 中 OOP 的良好资源。
关于javascript - 动物的基本 JavaScript 原型(prototype)和继承示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29838735/
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
给出这个例子: 动物 thisIsACat = new Cat(); 是否存在从 Cat 到 Animal 的隐式转换? 说明: 假设: class Animal { } class Cat: Ani
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
这个问题已经有答案了: What is PECS (Producer Extends Consumer Super)? (16 个回答) 已关闭 4 年前。 我对 Java 通用通配符有疑问 为什么这
我需要一个 java 库来确定哪个图像是“人体”;这是一张“人脸”;这是一个“动物”;这是一个“风景”等等。 有这样的东西吗? 谢谢 最佳答案 我不认为那里有什么方便的东西。特别是因为你在这里有非常广
我是一名优秀的程序员,十分优秀!