日期:2014-05-16  浏览次数:20315 次

大师Crockford的文章Classical Inheritance in JavaScript (ThoughtScript翻译)

大师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的原型方式确实比传统的方式更能表达继承关系。

JavaJavaScript
Strongly-typed Loosely-typed
Static Dynamic
Classical Prototypal
Classes Functions
Constructors Functions
Methods Functions

但是,首先我们需要思考我们使用继承的目的是什么?有两个主要的方面。第一是出于类型转换。我们希望语言环境能自动的对引用类的进行类型转换,但有时是无法通过类型系统的安全检查的,所以通常我们需要会对引用的对象进行显示转换,这对强类型语言至关重要,但是对像JavaScript这样弱类型语言却是无关紧要,因为Javascript中对象的引用不需要类型转换。
第二是考虑代码重用。通常我们通过使一系列不同对象实现相同的接口来达到重用。类继承方式通过创建一个单独的定义集合接口让重用变的可能,通常我们看到一些对象非常相似,但是对象间也存在区别,主要是增加或修改了一小部分方法。传统的类继承方式对代码重用的确有用,但JavaScript的原型方式更有用。
为了证明这点,我们将会介绍一些?
sugar<