什么是面向对象编程? 面向对象是一种编程思想,经常与面向过程进行比较。
其实说起来很简单,
面向过程的关注点是动词,分析解决问题的必要步骤,创建实现各步骤的函数,最后依次调用函数。
面向对象的关注点是主述,是将构成问题的东西分解为各个对象,但并不是为了实现分解对象的目的步骤,而是为了记述那个东西在当前问题中的各种各样的行动。
面向对象的特征是什么?封装:使用对象的人不考虑内部实现,只考虑功能使用来保护内部代码,并允许用户只使用某些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