首页 > 编程知识 正文

js面向对象 阮一峰,面向对象编程是什么

时间:2023-05-03 08:32:09 阅读:116520 作者:1456

什么是面向对象编程? 面向对象是一种编程思想,经常与面向过程进行比较。

其实说起来很简单,

面向过程的关注点是动词,分析解决问题的必要步骤,创建实现各步骤的函数,最后依次调用函数。

面向对象的关注点是主述,是将构成问题的东西分解为各个对象,但并不是为了实现分解对象的目的步骤,而是为了记述那个东西在当前问题中的各种各样的行动。

面向对象的特征是什么?封装:使用对象的人不考虑内部实现,只考虑功能使用来保护内部代码,并允许用户只使用某些api接口

继承:为了重用代码,它从父类继承了一些方法和属性,子类也有自己的属性

多态:不同的对象对同一操作产生不同的效果。 多态性的思想实际上分为“想做什么”和“谁做”

国际象棋的过程、

开局-国际象棋-棋盘展示-胜负检查-黑棋-棋盘展示-胜负检查-循环

用代码表示的可能是一系列函数的调用

init (; whitePlay (; //中一次性实现将棋操作的repaint (); //主板展示check (; 黑莓(; //将棋操作repaint (再单独实现一次; //主板展示check (; 对象为:棋盘.开局-选手.象棋-棋盘.再展示-棋盘.胜败检查-选手.象棋-棋盘.再展示-棋盘.胜败检查

用代码表示的话可能会变成这样

常数检查器board=new checker board (; //CheckerBoard类在内部阻止了板的操作,如板的初始化和胜负关系的检查

constwhiteplayer=new player (' white ); //Player类内部封装了各种玩家操作,包括等待、掉落、后悔和constblackplayer=new player (' black ) ) //start方法的结束封装在内部,或通过发出事件调用checkerBoard.repaint (,checkerBoard.check ) )的blackPlayer.start ) 只需调用newplayer并调用start方法即可。 也就是说,不需要知道内部发生了什么,只需要关注行动。

而且,添加另一个玩家等类似后悔之手的新功能时,面向对象的扩展会很好。

在上面的例子中,面向对象的特性是如何表现的呢? 封装: Player,CheckerBoard类不需要知道内部实现了什么,只需要考虑使用暴露的api

继承: whitePlayer和blackPlayer都是从Player继承的,可以直接使用Player的各种方法和属性

多态性: whitePlayer.start (和blackPlayer.start ) )的国际象棋颜色分别为白色和黑色

我知道什么时候使用面向对象是合适的。 在复杂问题之前,或者在参与者众多的情况下,面向对象的编程思想可以很好地简化、扩展和维护问题。

另一方面,在比较简单的问题面前,面向对象和面向过程的区别不明显,也可以分步调用。

Js的面向对象包含哪些方法?

属性

某些内置对象Object Array Date Function RegExp

对象的常规创建方法对于每个新对象,必须再次重写颜色和开始赋值

常数播放器=new object (; Player.color='white '; Player.start=function () (console.log ) ' white国际象棋'); (; 或工厂模式,两种方法都无法识别对象类型。 例如,Player的类型只有对象

功能创建对象() { const Player=new Object ); Player.color='white '; Player.start=function () (console.log ) ' white国际象棋'); (; 返回播放器; }由于构造函数/实例在this中添加的属性和方法始终指向当前对象,因此在实例化时,在this中添加的所有属性和方法都将复制到内存中,从而浪费内存。

但是,这样创建的好处是,更改一个对象的属性和方法不会影响其他对象。 因为每个对象都被复制了

功能播放器(color ) { this.color=color; this.start=function ((console.log ) color '国际象棋); (; } constwhiteplayer=new player (' white ); constblackplayer=new player (' black '; Tips .怎么看函数不是在内存中创建了好几次吗?

例如2 .在构造函数中

原型继承wite player.start===black player.start//output false原型的方式不是它本身。 一个一个地调查原型链。 这具有实例化对象指向此prototype对象的优点。

功能播放器(color ) { this.color=color; } player.prototype.start=function () console.log (color '国际象棋) ); (; constwhiteplayer=new player (' white ); constblackplayer=new player (' black '; 优点: start方法只存储在内存中一个

静态属性是绑定到构造函数的属性方法,必须通过构造函数访问

例如,我想看一下一共创建了多少个玩家

功能播放器(color ) { this.color=color; if (! player.total(player.total=0; } Player.total; }letP1=newplayer('white ); 控制台. log (player.total ); //1letP2=newplayer('black ); 控制台. log (player.total ); //2

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。