Javascript中的关键字“class”不会出现在普通的javascript代码

时间:2016-05-30 03:43:51

标签: javascript

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();

1 个答案:

答案 0 :(得分:2)

简而言之,Javascript是基于原型的,而不是基于类的。虽然某些机制可能看起来与来自其他编程语言的人类似,但在内部,链接对象的机制与链接类以创建继承,实例等的机制不同,如基于类的语言(如Python,Ruby) ,Java等。

凯尔辛普森在他的在线着作和他的OSS丛书YDKJS(特别是名为this and Object Prototypes

的书中更全面地介绍了这一主题。

引用JS面向对象样式的实现只是几种不同的模式,用于近似其他语言中基于类的机制。您可能会在“狂野”中遇到几种不同的Javascript OO模式。其中七个概述如下:

正如其中一位评论者指出的那样,ES6确实有class关键字,但这只是对JS中现有机制的“修饰”。它不会改变JS将继续基于原型而不是基于类的事实。