Javascript程序员通常不会使用关键字“class”。
我只想知道原因。
下面的代码看起来很容易理解,并且易于使用“扩展”概念
class Animal {
constructor(type){
this.type = type;
}
static isAnimal(obj, type){
if(!Animal.prototype.isPrototypeOf(obj)){
return false;
}
return type ? obj.type === type : true;
}
}
class Dog extends Animal {
constructor(name, breed){
super("dog");
this.name = name;
this.breed = breed;
}
bark(){
alert("ruff, ruff");
}
print(){
alert("The dog " + this.name + " is a " + this.breed);
}
static isDog(obj){
return Animal.isAnimal(obj, "dog");
}
}
var sparkie = new Dog("Sparkie", "Border Collie");
sparkie.bark();
答案 0 :(得分:2)
简而言之,Javascript是基于原型的,而不是基于类的。虽然某些机制可能看起来与来自其他编程语言的人类似,但在内部,链接对象的机制与链接类以创建继承,实例等的机制不同,如基于类的语言(如Python,Ruby) ,Java等。
凯尔辛普森在他的在线着作和他的OSS丛书YDKJS(特别是名为this and Object Prototypes
)
this
& Object Prototypes (Chapter 4: Mixing (Up) "Class" Objects) 引用JS面向对象样式的实现只是几种不同的模式,用于近似其他语言中基于类的机制。您可能会在“狂野”中遇到几种不同的Javascript OO模式。其中七个概述如下:
正如其中一位评论者指出的那样,ES6确实有class
关键字,但这只是对JS中现有机制的“修饰”。它不会改变JS将继续基于原型而不是基于类的事实。