JavaScript是面向对象的吗?

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

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


蝴蝶刀刀
浏览 779回答 3
3回答

LEATH

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实现它。

12345678_0001

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

相关分类

JavaScript