基于对象和面向对象的区别?

说javascript是基于对象的,那么基于对象和面向对象有什么区别?

阅读 10.8k
7 个回答

我忘了在哪里看到过这样一个比喻:
基于对象,就是一个工程师建了一栋房子,然后其它的工程师按照这个房子的样子去建造其它的房子
面向对象,就是一个工程师再图纸上设计出一栋房子的样子,然后其它工程师按照这个图纸的设计去建造房子

也就是说:
基于对象是先有一个具体的对象,然后在这个对象的基础上创建新的对象
面向对象就是先有一个抽象的对象描述,然后以此为蓝本构建具体对象

一般的面向对象语言 中的类的概念 都是 一个 抽象的声明,当 new 出来一个对象的时候,就是依据 类的声明给造出来的,就像是模子里面刻出来的。
javascript是基于对象的,那么它所有的对象都是从原型对象继承而来,和原型模式大概相似,Javascript的动态特性,可以随时的给对象的原型添加方法或属性,然后new出来的对象就有了。

具体还是参考 MDN

基于对象就是操作文档对象 ,而面向对象就是一种编程思想,所谓面向对象编程的3大特性就是封装,继承,多态。你学了php,java,c# 或者c++就知道面向对象是什么了

题主你的说法本身就有问题,javascript 是基于原型继承的面向对象编程语言,基于对象是什么鬼?哪里看来的?你看看害得多少人一本正经的胡作答,害人不浅呐!

基于对象 是指 这个编程语言有这个特征,是它的属性。
面向对象是指一种编程思想,一般指:面向函数,或面向对象,面向集合等等。
还有js 既可以面向对象,也可以面向函数。

新手上路,请多包涵

参考这篇:https://blog.csdn.net/cpongo3...
这里面向对象是指javascript缺少那些基于抽象类的面向对象语言风格,但其实并没有否定javascript面向对象的语言能力。只是风格不同,并非能力不同。
基于对象是指高赞回答里,在具体一个已有的对象原型上去实现所有面向对象所需的功能,包括封装、继承(多重继承貌似还不支持)、多态,但是由于它不是强类型的面向对象,一些不好的写法会大大损伤语言的清晰简明可读性,更像hack或者炫耀语言里面那些“不好”的特性的特殊用法,比如用eval来动态创建全局函数、对象、变量等。但者其实并不影响javascript像java或smalltalk一样,用面向对象的思维去编程,创建可读性强、易于维护的代码。
这也是Python认为做对一件事只有一种方法的哲学思想为啥那么受欢迎了,避免程序员为了炫技增加代码的复杂性--也就更容易出错。
但是前端程序员,特别是H5等单页面web应用的程序员,不可能不去好好的学习正确使用javascript,所以基于也好,面向也好,并不影响javascript快速构建有一定规模的前端或后端系统(Node.js)。太复杂的据说还是得用java这些成熟的面向对象语言。

新手上路,请多包涵

面向对象一般来说我们认为有三大特征:封装、继承和多态。而基于对象可以认为只使用了封装这一个特征。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题