【问题标题】:What type of language is JavaScriptJavaScript是什么类型的语言
【发布时间】:2010-11-08 01:37:11
【问题描述】:

我正在上 HTML 课程,我们的教科书说 JavaScript 是一种基于对象的脚本语言。在我们的测验中,其中一个问题是“JavaScript 是一种面向的脚本语言,判断对错。”我把 False 因为我的理解是基于对象和面向对象是两个不同的东西。我答错了。

JavaScript 真的是一种面向对象的语言吗?

感谢您提供的任何澄清!

【问题讨论】:

  • 我同意称它为 OO 有点牵强。
  • 它是面向对象的,它只是不像某些人可能习惯的那样基于类的语言,它是基于原型的
  • 你应该问你的教授 O-based 和 OO 对他来说是否一样。
  • 啊,对不起,疯子。我搜了一下,没看到那个贴!我从所有这些回复中得到的是,答案是相当主观的,这取决于您如何解释面向对象编程的摇摆不定的定义。我想知道我是否应该和我的老师争论。非常感谢大家的回复!

标签: javascript oop


【解决方案1】:

JavaScript 使用基于原型的编程,这是一种面向对象的编程。原型是通过克隆现有对象而不是基于类的继承来重用行为的一种方式。它与基于标准类的面向对象编程有很大的不同,以至于很少有人费心去学习它以充分利用它。

http://en.wikipedia.org/wiki/Prototype-based_programming 是一个有用的参考。

【讨论】:

    【解决方案2】:

    面向对象的定义有时是主观的。对于某些人来说,任何处理“对象”的语言都是面向对象的。对于其他人来说,整个语言及其构造必须利用对象才能被视为面向对象(想想 SmallTalk 或 Java)。

    在 javascript 中,您可以编写其中没有对象的脚本,或者您可以创建大量面向对象的代码。您是否称其为面向对象实际上取决于您遵循的思想流派。

    【讨论】:

    • +1,我猜 OP 在测验中是否正确取决于教科书如何定义这些术语。当然,事实仍然是这样的问题不应该被问到。
    • 编写一个没有对象的脚本是相当困难的。你不能使用任何函数,只能使用原始数字、字符串和数组。
    【解决方案3】:

    我想说面向对象不是编程语言的特性,而是代码的特性。代码不会仅仅因为它是用一种特定的语言编写的而变得面向对象、基于原型或函数式的,只有当作者使用这种风格时,它才能获得这样的品质。

    当然,将 Java 之类的语言称为面向对象是有意义的,因为该语言是专门为该范式设计的,但是 JavaScript 可以很好地处理大量不同的范式,所以你真的不能在上面贴标签。

    【讨论】:

      【解决方案4】:

      我相信这个答案已经在其他地方得到了回答.... object-based 和 object-orientated 是同一个东西,可以互换使用。术语实际上没有区别 - 有些人更喜欢其中一个。

      回答您的问题,是的,Javascript 是面向对象或对象基于

      【讨论】:

      • 面向对象和面向对象有什么区别?
      • 它们有一些细微的差别......显然 VB6 是基于对象的,但不是面向对象的,因为它不支持继承。
      • @tchrist:它是 object-base 的副词,意思是基于对象的,同样适用于面向对象......再次,你迷上了这个术语,如果你看到它,想想 OOP 哪个是 Object Oriented Programming 的首字母缩写词,同样,Oriented,Orientated...同样的事情... :)
      • tommieb75 确实是正确的,虽然我很少看到 orientated 被使用,但它不像以听力为导向的那样普遍,但它们的意思是一样的。
      • 既然 面向对象 在客观上是一个更错误的词,我认为它一定比普通的老式普通方法更客观 面向对象。否则我反对它的额外音节。 ☺
      【解决方案5】:

      Javascript 是 ECMAScript 的超集,它是一种多范式(函数式、过程式)、基于原型、函数式、命令式的脚本语言,具有鸭/弱/动态类型,并受 Perl、C、Python、Java、方案。

      ECMAScript 由 Brendan Eich 创建。来源:http://en.wikipedia.org/wiki/ECMAScript

      它采用了ifelsefor等C结构,也有来自Scheme的closureslambdas,以及来自Self的prototype-based继承,因此可以在OO方式。

      【讨论】:

      • ECMAScript 到底是如何受到 Python 或 Scheme 的影响的? Python 是如此美丽和高效的语言,而 ECMAScript 只是……不是,Scheme 是一种 Lisp 方言。代码即数据等。ECMAScript 将代码视为纯 ASCII 字符序列。
      • Python 和 Scheme 都有闭包和 lambdas。巧合的是,在两者之后出现的 ECMAScript 也有。 Python 的语法和结构与 ECMAScript 非常相似。您可以从字面上复制粘贴一些 Python 代码,它在 ECMAScript 中的工作方式完全相同。所以我并不是说整个语言都是复制粘贴的,但至少基本部分受到了影响。
      【解决方案6】:

      基于对象,面向对象,基本一样。我的印象是面向对象比基于对象要严格一些。

      基于对象意味着该语言使用将状态和操作封装在“对象”中的思想。

      面向对象意味着该语言是为使用对象编程而设计的。

      差异很小。请参阅 object-based languageobject-oriented programming 上的维基百科文章,以更好地了解差异。

      【讨论】:

        【解决方案7】:

        面向对象编程 (OOP) 一词通常没有很好的定义。请参阅 Jonathan Rees 关于 OO 的说明:Rees on OO。 Javascript 有一个基于名为 prototypes 的概念的 OO 模型。基于原型的模型与 Java 或 C++ 中使用的模型不同,但它肯定属于基于 OOP 的语言的总称。

        也许“基于对象”这个词被用来强调关于 javascript 的这一事实。它使用对象,但与 Java 或 C++(或 C#)不同。

        【讨论】:

          【解决方案8】:

          面向对象的基础知识已经存在,但其结构与其他更常见的面向对象语言(如 C# 和 Java)不同。您可以创建对象构造函数和方法,并访问和检索对象属性。 JavaScript 被设计成一个完全 面向对象的语言从一开始就受到 Perl 和 Python 的影响,因此受到了当前编程习惯的影响。

          javascript 中这种面向对象的表示法有什么问题?

          function Class( name, teacher ) {
            this.name = name;
            this.teacher = teacher;
          }
          

          【讨论】:

            【解决方案9】:

            如果你的测验既没有定义“面向对象”也没有定义“脚本语言”,我看不出你应该如何回答这个问题。

            【讨论】:

              猜你喜欢
              • 2021-02-19
              • 1970-01-01
              • 1970-01-01
              • 2015-08-15
              • 1970-01-01
              • 2010-11-01
              • 2016-08-25
              • 1970-01-01
              相关资源
              最近更新 更多