请停止将JavaScript类型化(建议不要使用class实现类继承)


发布者 ourjs  发布时间 1437966714805
关键字 心得体会  分享 
作者注:每个人都有自己的编程风格,绝不应被迫服从他人的风格。但是,我认为,最好的风格应建立语言的特点上,要考虑语言的优势。如果您正在JS中使用经典的继承方式,我的意思并不是让你立即采用我建议的风格,我认为每个人都应该有用不同写法的权力。

有一件事让我很沉重,就是许多JavaScript开发人员一直试图将JavaScript变成经典的继承模式。

TypeScript和CoffeeScript就是这个问题的症状。

TypeScript其实还可以。至少这是一个超集,所有现有的JS可以复制并粘贴到里面。它具有静态类型检查,它可以很好的运行在大型代码库中。

CoffeeScript就不一样,它是完全不同的。如果没有学过该语言,它会很难读懂,即使是将其编译成JS。

这两种语言似乎都有一个共同的目标:把JavaScript变成经典的继承模式。这似乎是开发者之间的一个很受欢迎的东西,这让我很不爽。

跟我一块说:

JavaScript不是一个经典的语言

它是基于原型的,所以请使用原型。你应该像Object.create这样定义原型对象和工厂方法:

var MyClass = {
  prototype: {
    // prototypal members and methods
  },
  create: function(options){
    // do stuff with options
    return Object.create(MyClass.prototype, options);
  }
};

而不是在ES6中和其他衍生语言中定义的那些可怕的class语法。

这一点,在我看来比class的继承方式更加清晰,整洁,也更符合语言的架构。它有助于发挥JS的优势。

我很清楚经典继承方式的吸引力。甚至道格拉斯Crockford, JavaScript Good Parts (原声PPT) 作者 都实现了一个经典的伪继承 , 开明的JavaScript的创造者布Brendan Eich似乎喜欢很ES6中的class。对于许多程序员来说,这是在他们使用JavaScript之前很熟悉和舒适的编程方式。然而,JavaScript并不是一个经典的语言,语法糖和ES6的新class关键字只是在自欺欺人。

我们应该教别人原型继承是如何工作的,它的好处是什么和使用的最佳方式。我们不应该让这种语言假装可以像C++或Java一样工作。

我觉得应该让人们听到像 Eric Elliott 和 Douglas Crockford 分享的这些观点。

如果你想了解 class 这样的关键字为什么那么可怕,为什么原型继承比经典的好,可以看一看 Eric Elliott  的文章。

注* 相关文章 使用简单的JavaScript,我们为什么应该抵制ES6的一些特性 












回复 (10)
  • #
  • #1 林甩土 1437977075473

    恩, 独到的见解。

  • #2 梅决仆 1437977975146

    “JavaScript不是一个经典的语言”就是本文的唯一论据? 没有任何分析,不知所云。

  • #3 黎价旬 1437990086159

    自相矛盾 "每个人都有自己的编程风格,绝不应被迫服从他人的风格" 明显与标题 "请停止将JavaScript类型化"

    有人喜欢类型化,有人不喜欢类型化,各用各的,不用建议了.

  • #4 jie 1437996935763

    es6是大势所趋

  • #5 蔡划出 1438098003702

    es6 的class 只是语法糖,es6还是基于原型的继承。不过作者的担心是有必要的。如果改变语法只是第一步,第二部是吧js变成基于类继承,那么js就不再是js了。

  • #6 xiaozhi 1438160987047
  • #7 章个丹 1438742011951

    很不喜欢 es6

  • #8 周她习 1464230487292

    改成类继承没啥不好吧,大规模的编程这样看起来更加自然一些

  • #9 石出帅 1464244535728

    必须改为强类型的,不然永远是一坨

  • #10 洪手子 1491787293392

微信扫码 立即评论