为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript是面向对象的吗?

JavaScript是面向对象的吗?

蝴蝶刀刀 2019-11-21 11:03:10
关于JavaScript是否是面向对象的语言存在一些问题。甚至有这样的说法:“仅仅因为一种语言包含对象,就不能使它成为OO。”JavaScript是一种面向对象的语言吗?
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

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的函数不再在_value范围内,因此无法访问它。我们将需要将_value提升为的属性,this但这将使其在为该类编写的代码的控制范围之外可访问,因此封装被破坏了。


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


查看完整回答
反对 回复 2019-11-21
?
12345678_0001

TA贡献1802条经验 获得超5个赞

语言不需要像Java那样完全面向对象。Javascript中的所有内容都是对象。与C ++或更早的Java相比,后者在某种程度上被广泛认为是面向对象的,但仍基于原语。多态性在Javascript中不是问题,因为它根本不关心类型。语法不直接支持的唯一核心OO功能是继承,但是可以轻松实现,但是程序员希望使用原型:这是一个这样的示例。


查看完整回答
反对 回复 2019-11-21
  • 3 回答
  • 0 关注
  • 762 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信