当前位置: 首页 > 面试题库 >

JavaScript是面向对象的吗?

柯阳曦
2023-03-14
问题内容

关于JavaScript是否是面向对象的语言存在一些问题。甚至有这样的说法:“仅仅因为一种语言包含对象,并不能使它成为OO。”

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


问题答案:

IMO(并且仅是一种意见) 面向 对象语言 主要特征是它将支持多态。几乎所有动态语言都可以做到这一点。

下一个特征是封装 ,这在Javascript中也很容易做到。

但是,在许多人的心中,继承 (特别是实现继承)将在某种语言是否符合被称为面向对象的语言方面取得平衡。

Javascript确实提供了一种相当容易的方法来通过原型继承实现,但这是以封装为代价的。

因此,如果您面向对象的标准是多态性,封装和继承的经典三人组合,那么Javascript不会通过。

编辑 :提出了一个补充问题“原型继承如何牺牲封装?” 考虑以下非原型方法的示例:

function MyClass() {
    var _value = 1;
    this.getValue = function() { return _value; }
}

_value属性是封装的,不能由外部代码直接修改。我们可能会在类中添加一个更改器,以完全由属于该类的代码控制的方式对其进行修改。现在考虑对同一个类的原型方法:

function MyClass() {
  var _value = 1;
}
MyClass.prototype.getValue = function() { return _value; }

好吧,这坏了。由于分配给getValue的html" target="_blank">函数不再在_value范围内,因此无法访问它。我们将需要将_value提升为的属性,this但这将使其在为该类编写的代码的控制范围之外可访问,因此封装被破坏了。

尽管如此,我仍然投票赞成Javascript是面向对象的。为什么?因为给定了OOD,所以我可以用Javascript实现它。



 类似资料:
  • 本文向大家介绍javascript中的面向对象,包括了javascript中的面向对象的使用技巧和注意事项,需要的朋友参考一下 相信大家对javascript中的面向对象写法都不陌生,那还记得有几种创建对象的写法吗?相信大家除了自己常写的都有点模糊了,那接下来就由我来帮大家回忆回忆吧! 1. 构造函数模式 通过创建自定义的构造函数,来定义自定义对象类型的属性和方法。 2. 工厂模式 该模式抽象了创

  • 问题内容: Java具有原始数据类型,这些原始数据类型不是像Ruby中的对象那样派生的。那么我们可以将Java视为100%面向对象的语言吗?另一个问题:Java为什么不设计原始数据类型以对象方式? 问题答案: 当Java首次出现(版本1.x)时,JVM确实非常缓慢。尽管从长远来看,这是一个非常糟糕的决定,但不将基元实现为一流的对象是出于速度目的而采取的一种折衷方案。 “面向对象”对于很多人来说也意

  • 本文向大家介绍Javascript之面向对象--封装,包括了Javascript之面向对象--封装的使用技巧和注意事项,需要的朋友参考一下 第一步:做一个“手机的类" 第二步:考虑这个类,里需要那些类的私有属性,这里我想定义的是实例出来手机的数量 第三步:创建一个构造函数,即实例时候,对产生的新象的一个初始化,例如属性,方法的初始化;在这个例子中,每一个手机都会有颜色,大小,价格属性.这里的构造函

  • 本文向大家介绍Javascript之面向对象--方法,包括了Javascript之面向对象--方法的使用技巧和注意事项,需要的朋友参考一下 JavaScript面向对象是近年来比较火的一个概念了,由于小弟才疏学浅,虽然做过不少的web项目,看了网上很多深奥的资料和教程,还是对他们深奥的理论一知半解,前段时间看了点书,总算有了自己的理解,今天也出来装一回,如果觉得很深奥,请直接鄙视我,如果觉得不对,

  • 本文向大家介绍Javascript之面向对象--接口,包括了Javascript之面向对象--接口的使用技巧和注意事项,需要的朋友参考一下 接口:对实现某一种任务、功能,目的等,所规定的一些原则。 程序中的接口:规定好有几个方法,方法名是什么。(因程序中要完成任务,都是通过函数或者说方法去实现的。) javascript中的接口:把实例出来的某"类型对象"、和实例出来的"接口对象",进行一个比较,

  • 问题内容: 我想知道Java是否是纯面向对象的。请举例说明。我已经扫了一眼,但是我找不到确切的答案。 问题答案: 关于Java是否是纯粹面向对象的,有很多争论。Java具有包装程序类,因此应被视为纯面向对象的语言。所以,你可以使用,等来代替,等(总共有八种原始类型)。 但是由于Java具有这八种原始类型,因此批评家会说Java并非纯粹是面向对象的。