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

如何理解Javascript中类和对象这两个概念?

如何理解Javascript中类和对象这两个概念?

守着一只汪 2019-03-28 16:19:46
如何理解Javascript中类和对象这两个概念?
查看完整描述

6 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

Javascript 没有提供“类”这种语法结构,也就是类似 Java 语言里的 class,不过 Javascript 的确有保留 class 这一关键字。

Javascript 是面向对象语言,比 Java 还要彻底的面向对象。在 Javascript 中使用“构造器”来实现对象的类型化。构造器就是函数,惯例是首字母大写函数名来代表这是一个构造器,用 new构造器名字 来创建实例对象,在构造器(及其原型属性对象)内部,this 指代实例对象。

Javascript采用“原型继承”而不是“类型继承”,通过对象的原型链进行属性(方法)的查找。

以上细节可参看我博客里的《理解 Javascript》系列

至于对象,Javascript 里几乎一切都是对象(除了个别特例)。很多人简单的把 JSON 视作 Javascript 对象简直是大谬!Javascript 采用 {} 作为基本对象类型(Object)的字面量表达形式,而 JSON 则是借鉴这种形式创造出来的一种数据格式而已,形似而神非。

如何理解对象和类?

只要记住一句话:

面向对象,而不是面向类。

类只是我们用来组织对象和构造程序的一种形式,它本质上源自于人们对于现实世界中的一种概念映射,即:凡是具有共同点的部分便可以抽象成一类,抽象层次越高,类在继承体系中的层级越高(或者说越低,看你从哪个方向来看了,总之就是越来越基础,直到成为一切衍生类型的始祖)。

相应的,在 Javascript 里,一切对象归根结底都是源自于 Object,如果你扩展(重载)了 Object 的原型(Javascript 基于原型继承),那么其他的一切对象都可以获得这些扩展(重载)。所以在 Javascript 的世界里,类不是必须的,没有类一样可以面向对象。

我们采用构造函数来模拟类,只是为了能在应用的业务领域里重现基于类语言的那种类型化(更容易和我们看待事物的方式相匹配),但是由于一些语言设计上的不足甚至是错误,使得 Javascript 很难完整的实现经典类型系统。比如说要实现私有成员属性,就要先理解 Closure(闭包),这对很多初学者来说是一个障碍(但有的时候你更应该问问自己:我非得这样做不可吗?)。

你要抛开形式上的对比,直入去理解对象的本质。在更高版本的 Javascript 里(harmony),将直接实现基于 class 的类型系统(未定),届时构造器的繁琐实现应当会成为历史了,但是面向对象的本质并没有变,Javascript 还是可以不必非用类来写程序。

Javascript 被设计成一种非常灵活的编程语言,我们不应把目光局限在经典的类型系统中(别学 Java 那一套,不合适),还有其他很广阔的应用场景,比如元编程,比如函数式编程等等都值得你去了解和尝试。

法无定法,因而幻化无穷。这就是对象。


查看完整回答
反对 回复 2019-04-11
?
aluckdog

TA贡献1847条经验 获得超7个赞

其他语言没什么大区别,区别在JavaScript中类实现方式。

类 :对一群具有相同特征的对象的集合的描述;
对象:真实存在的对象个体;

举个简单的例子:“最近养了一个动物,就是我家的小猫”。在这里里面:
动物——>类
我家的小猫——>对象


查看完整回答
反对 回复 2019-04-11
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

各种语言的类和对象都是差不多的。。。

类:比如人类,指的是一个范围;
对象:比如某个人,指的是这个范围中具体的对象。


查看完整回答
反对 回复 2019-04-11
?
繁星coding

TA贡献1797条经验 获得超4个赞

js里一切皆对象,类则是用用对象的方法模拟了传统编程语言中的类概念,包含了属性,扩展,继承等等


查看完整回答
反对 回复 2019-04-11
?
杨魅力

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

Javascript中的function作为构造函数时,就是一个类,搭配上new操作符,可以返回一个对象。
当然,要生成一个对象,也可以用字面量的形式,例如var obj = {x: 1, y: function(){} };
类可以理解为一个模板,而对象就是根据这个模板造出来的具体实例。

写的比较简洁,希望有所帮助。


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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号