【问题标题】:Scripting Language and Compiled Language脚本语言和编译语言
【发布时间】:2011-03-31 17:23:47
【问题描述】:

我有两个问题:

  1. Jquery/MooTools 如何扩展 Javascript 的语法?我的意思是为什么你可以为 Jquery 和 MooTools 提供 Javascript 中不存在的新语法?
  2. 由于 MooTools 允许用户拥有类继承。像这样的解释型语言越来越接近于编译型语言。它们最终会取代 Java(在 JVM 上运行)吗?还是 Java 的某些特定方面是 Javascript 的扩展永远无法实现的?

这可能是愚蠢的问题,但我真的想要一些关键词来解释它们。

谢谢

【问题讨论】:

  • 我假设您的意思是 MooTools 不是“MoonTool”(用于查找月相的微软产品?)
  • 我认为这些天解释语言和编译语言之间的区别是没有意义的。 Java 不被认为是解释型的,因为它编译为字节码,而像 Python 这样也编译字节码的东西通常被称为脚本化。如今,即使是 Javascript 也可以通过 V8 (Chrome) 和 Chakra (IE9) 在您的浏览器中编译。此外,拥有类和继承(在纯 Javascript 中都可能)与一种语言是编译还是解释无关。

标签: java javascript jquery mootools


【解决方案1】:

JQuery 给人一种重新定义语言的印象的方法是使用 $ 运算符。然而,可能不清楚的是 $ 只是在窗口(全局)范围内声明的函数,因为 $ 是 JavaScript 中的有效变量名:

来源:

jQuery = window.jQuery = window.$ = function( selector, context ) {
    // The jQuery object is actually just the init constructor 'enhanced'
    return new jQuery.fn.init( selector, context );
},

【讨论】:

    【解决方案2】:

    他们并没有扩展 javascript 的语法。他们仍然必须遵守 javascript 的所有语法规则。

    【讨论】:

      【解决方案3】:

      jQuery 没有扩展 javascript 的语法——它只使用了一些花哨的技巧,比如使用 $ 变量。 MooTools 的类实际上是您实例化的类。既没有扩展 javascript 的语法,只是通过巧妙地使用变量使其看起来如此。

      关于你关于解释和编译语言的第二个问题,答案有点复杂,可能超出了我的范围。试试Google

      【讨论】:

        【解决方案4】:

        Jquery/MoonTool 如何扩展 Javascript的语法?我的意思是为什么你可以为 Jquery 和 MoonTool 提供 Javascript 中不存在的新语法?

        你不能。 Javascript 语法非常灵活,因此您可以通过多种方式向现有语法添加新语义(含义/功能)。

        由于 MoonTool 允许用户拥有 类,继承。口译 像这样的语言越来越近了 编译为语言。他们会吗 最终替换 Java(运行在 JVM)?

        解释与编译与语言语法或语义无关。此外,现在 Javascript 和 Java 通常都是 JIT 编译的。

        或者有没有 Java 的特定方面 对 Javascript 的扩展将 永远达不到?

        对一件事进行静态类型检查(当然,除非语言规范相应更改。但这很可能以一种理智的方式是不可能的)。或对普通整数的原生支持。

        【讨论】:

          【解决方案5】:

          像 jQuery 和 MooTools 这样的库不会“扩展” JavaScript 语法。这都是合法的 JavaScript。他们只是以您不熟悉的方式使用它。例如,jQuery 中的 $ 只是变量的名称,因为 JavaScript 变量中可以包含 $

          另外,不,JavaScript 与 Java 完全不同。 JavaScript 一种面向对象的语言,但它的实现方式不同。我不熟悉 MooTools,但它们并没有做任何特别的事情。看起来他们正在“改变” JavaScript,但事实并非如此。编译 JavaScript 是没有意义的。

          【讨论】:

          • “JavaScript 是一种面向对象的语言,但它的做法不同” - JavaScript 本质上不是一种面向对象的语言,它是基于对象的。但是,您可以编写面向对象的 JavaScript,使用函数并模仿继承、私有范围等。
          • @Mark:仅仅因为 JavaScript 是面向对象的,并不意味着它不能 也能正常工作。我推荐你:en.wikipedia.org/wiki/Prototype-based_programming
          • 嗯?我不太确定你是否理解我的评论。我说它不是面向对象的,它是基于对象的。它们是有区别的。我也从未说过它不起作用。 JavaScript 非常强大。
          • JavaScript 和 Java 除了前 4 个字母外没有任何共同之处。
          • @Mark:我想我不明白你是如何暗示“基于对象”与“面向对象”不同的。无论哪种方式,我们都是英语语言语义。我们基本同意:-P
          猜你喜欢
          • 2010-12-24
          • 1970-01-01
          • 2010-11-18
          • 1970-01-01
          • 1970-01-01
          • 2010-10-19
          • 2013-06-19
          • 1970-01-01
          • 2011-03-16
          相关资源
          最近更新 更多