日期:2014-05-16 浏览次数:20346 次
大师Douglas Crockford 的文章,现有的中文翻译实在不该恭维,故冲动的翻译了下。
转载请注明出于:http://thoughtscript.appspot.com/Classical-Inheritance-in-JavaScript
?
?
Classical Inheritance in JavaScript?
Douglas Crockford?? ?www.crockford.com???翻译:ThoughtScript ?原文链接?http://javascript.crockford.com/inheritance.html
And you think you're so clever and classless and free ?— John Lennon
JavaScript?一种是与类无关的面向对象语言(基于对象),因此Javascript使用了基于原型的方式(原型链)代替传统面向对象语言的继承方式。这可能会让过去习惯于使用C++、Java这类面向对象语言继承方式的程序员感到困惑。但马上你就能认识到实际上Javascript的原型方式确实比传统的方式更能表达继承关系。
Strongly-typed | Loosely-typed |
Static | Dynamic |
Classical | Prototypal |
Classes | Functions |
Constructors | Functions |
Methods | Functions |
但是,首先我们需要思考我们使用继承的目的是什么?有两个主要的方面。第一是出于类型转换。我们希望语言环境能自动的对引用类的进行类型转换,但有时是无法通过类型系统的安全检查的,所以通常我们需要会对引用的对象进行显示转换,这对强类型语言至关重要,但是对像JavaScript这样弱类型语言却是无关紧要,因为Javascript中对象的引用不需要类型转换。
第二是考虑代码重用。通常我们通过使一系列不同对象实现相同的接口来达到重用。类继承方式通过创建一个单独的定义集合接口让重用变的可能,通常我们看到一些对象非常相似,但是对象间也存在区别,主要是增加或修改了一小部分方法。传统的类继承方式对代码重用的确有用,但JavaScript的原型方式更有用。
为了证明这点,我们将会介绍一些?sugar<