我读到基于对象和面向对象的区别之一是前者支持内置对象(例如,Javascript中的窗口对象).So,什么是内置对象,以及为什么在面向对象的语言中没有内置对象。
发布于 2017-07-26 00:25:32
这实际上不是这两个术语之间的区别。
对于被认为是“面向对象”的编程语言,它必须支持以下四个编程概念:
有许多语言支持这些 (Java、C/C++、C#、JavaScript等)。
然而,有些语言不是这样的,一个著名的例子就是我们现在所说的“经典VB”(在引入.NET之前的Visual Basic )。该语言可以模拟继承,但语言中没有为它构建的实际机制,所以尽管"Classic VB“具有本机对象,但它是一种”基于对象“、”非面向对象“的编程语言,因为它确实支持对象的概念,但并不是真正的OOP语言所需的所有方面。
应该注意的是,许多OOP语言都是建立在“类”作为生成对象的机制的概念之上的。而且,虽然这是一种非常流行的对象架构方法,但并不要求语言必须是面向对象的。JavaScript没有类(尽管有class关键字),它有“原型”,它们是实现对象的架构。
您提出的关于“原生”对象的问题与此无关。您很可能会读到本机对象与上的所有内容相关,但该页面上有许多错误,我对该页面进行了编辑以使其更准确。一种语言是否具有“内置”或“本机”对象与它是面向对象还是基于对象无关,因为这两种类型的语言都是以对象为中心的(我自己的术语)。例如,VB6是一种基于对象的语言,但支持大量的本机对象,而VB .NET (它的后继者)是面向对象的,也支持大量的本机对象。
我要告诉你的是,“原生”对象就是直接构建到语言规范本身中的对象,运行时环境可以在内部访问它。在JavaScript中,一些示例可能是String、Date、Array、RegEx、Math、Object等。请注意,虽然您在问题中提到了window,但window不是本机JavaScript对象,该对象是由托管JavaScript运行时的浏览器提供的。如果您在Node.js中运行JavaScript,window将不可用,因为它不是JavaScript原生的,并且节点不向运行时提供这样的对象。
这里有一些很好的链接,可以帮助您理解OOP概念以及它们在JavaScript中的工作方式:
发布于 2017-07-26 00:23:01
全局对象是window object。它既不存在于Java中,也不存在于Node.js的JavaScript中,因为它引用了浏览器窗口。
有关所有全局对象的信息请单击此处:Global Objects (MDN)
如你所见,这里有很多全局对象。例如,在Java和JavaScript中都存在Array全局对象。
发布于 2017-07-26 00:23:15
在像Java这样的面向对象语言中有“内置”的对象(或者大多数人会这样认为),只要想想基本的Object (继承层次结构的顶层)和标准库中的许多最核心的特性就可以了。
我的印象是,人们会说这句话是为了指出JavaScript中仍然有一些对象,但是你实际上不能像在其他语言中那样声明/创建一个全功能的类。但是,我的意思是,C#和Java中的数组和JavaScript中的数组一样是一个对象。
为了让人将一种语言称为“面向对象的”,我假设它需要类(或类似的构造,Go中的struct ),这就是为什么你通常不会将JS描述为面向对象的。也就是说,类已经被添加到ES6中,所以它现在可以说是完全面向对象的,只是使用了一个弱类型系统。
https://stackoverflow.com/questions/45308671
复制相似问题