美文网首页
如何解读《JavaScript权威指南》上一段话?

如何解读《JavaScript权威指南》上一段话?

作者: 晴天小雨不感冒 | 来源:发表于2020-03-28 00:36 被阅读0次

犀牛书上的一段话

《JavaScript权威指南》中开篇有这么一段话:
“如果你有其他语言的编程经历,这会有助于你了解JavaScript是一门高端的,动态的,弱类型的编程语言,非常适合面向对象和函数式编程风格。JavaScript的语法来自Java,它的一等函数特性来自Scheme,它的基于原型的继承来自Self。但使用本书学习JavaScript不必去了解那些语言或熟悉那些术语。”

容易引起的误会

这段话很容易对JavaScript的初学者造成一些误解,认为JavaScript是一门入门容易,而且很容易掌握的编程语言。很多初学者在刚刚接触JavaScript的时候都有过一段怎么写都不报错的愉快的编程之旅,比如,变量名写错,不会报错。比如,忘记在句末写分号,也不报错。那么,我们需要思考的是,为什么JavaScript的容错性能做得这么好,而其他语言比如Java做不到呢?原因在于,JavaScript是解释型语言,而Java是编译型语言。解释型语言意味着解释器是逐行执行代码,它不需要再生成目标代码,也就是说,解释器在执行代码的时候仍然可以对代码做语法分析,因此,即使在运行阶段,它仍然可以对代码语法进行容错处理。编译型语言都要生成目标代码,比如Java的.class文件,目标代码一旦生成,它就脱离了源代码文件而成为一个静态的可执行文件,就不能再修改了,除非再重新编译一次,机器会直接运行目标文件中的指令。因此,解释型语言随便你怎么胡乱写,都有解释器帮你兜着,出不了那种捅破天的篓子。编译型语言的语法检查要严格得多,因为编译型语言最终要生成计算机能识别的机器代码,这些机器代码在执行过程中并没有一个逐行解释执行的过程,它的执行效率比解释型语言要高的多,代价便是它有更为严格的代码规范。

这是怎样的面向对象?

那么在这之后呢?我们发现愉快的旅程总是短暂的,尽管JavaScript的语法来自Java,但它的内在又不是Java,尽管它也是面向对象语言,但和Java的面向对象又不一样。我们以一个最简单的继承代码为例:

Java:
class A
{
    public static int n = 0;
    public A()
    {
        A.n++;
    }
    public void Fun()
    {
        System.out.println("A");
    }
}
class B extends A
{
    public B()
    {
        super();
    }
}
class C extend B
{
    public C()
    {
        super();
    }
}
B b = new B();
C c = new C();
System.out.println(A.n);//打印2,表示A被实例化2次

JavaScript:
var a = {
    Fun : function()
    {
        console.log("A");
    }
};
var b = Object.create(a);
var c = Object.create(a);

在上述的Java代码中,类B和类C虽然都是继承了类A,但对类B和类C进行实例化的时候调用了两次A类构造函数,对象b和对象c的父类并不是同一个对象,它们各自拥有一个自己父类对象。JavaScript却不一样,在上述JavaScript代码中,对象b和对象c父对象都是a对象。由于这样的区别,我们称JavaScript为基于原型链的面向对象,Java为基于类的面向对象。虽然语法相似,但是一个是李逵,一个是李鬼,骨子里是不一样。在本人看来,JavaScript是一门非常复杂的语言,而且我认为所有入门容易的编程语言都比较难精通,尤其是近年来JavaScript的发展非常迅速,囊括了前端后端等方方面面,它在语言层面的扩展也越来越丰富。本人就曾亲耳听过某著名公开课讲师坦承自己写了11年JavaScript,但在JavaScript的殿堂里,仍然只是一个小白。

更合理的解读

那么,对于《权威指南》上的那一段概述,我们应该做如下解读才更合理:JavaScript是一门高端的,动态的,弱类型的编程语言,它非常容易入门。JavaScript的语法来自Java,它的一等函数特性来自Scheme,它的基于原型的继承来自Self,非常适合面向对象和函数式编程风格。如果你有其他语言的编程经历,比如Java,这将助你更深入地理解JavaScript的独特之处。
你是否也这样认为呢?

相关文章

网友评论

      本文标题:如何解读《JavaScript权威指南》上一段话?

      本文链接:https://www.haomeiwen.com/subject/eemduhtx.html