JS面向对象

论坛 期权论坛 期权     
爱搞事的程序员   2019-7-13 08:23   3758   0
        一直说要写公众号,但是总感觉每次没啥词,理解不够深,困惑了好久,看了网上不少资料,还是决定写一篇自己复习用。(老年人记忆力太差)。                          

         学习js这门语言的时候,最常听的一句话应该就是万物皆对象,如果问你有没有对象?你说没有的话,很有可能会让你New一个,那么new对象到底是咋回事呢,这得从盘古开天辟地说起了;今天要讲的是面向对象 简称OOP(object oriented Programmin )也是一门面向对象程序设计语言,然后面向对象大多数编程语言都有,因为只会javascript,所以写的都是关于JavaScript的面向对象。            


          因为万物皆对象,我们的面向对象就是通过将现实事物以及关系通过程序抽象出来,将同一类型事物放在对象里,形成了一种模型化。这个模型像一个盒子,在里面可以存放着该对象的功能和属性,需要什么功能直接使用就行了。并且通过封装,继承,多态等特性,事我们的程序更加灵活并且易于维护。   

          javascript没有类的概念只有对象,首先是封装对象。js中创建对象可以直接对我们的属性和方法进行封装,便于大量数据的管理和使用。创建对象有三种方式:        第一种是以字面量的形式,属性数据以可见的方式集中保存在一个{}里如:var dudu={dname:"dudu"},       第二种是内置构造函数的方法,通过js自带的内置构造对象object,使用new的方式创建。var dudu=new Object()属性通过dudu["属性名"]的方式添加进去。      第三种是自定义构造函数,(也可以算两种,因为同是构造函创建),由自己定义事物类型。如下:function Dudu( name){this.name:name    say=function(){console.log(`i m ${this.name}`)}}var dede=new Dudu("dudu")


通过构造函数是js面向对象的根本。上面这段代码在我们创建的时候会保存我们需要定义事物的类型。当调用new操作符的时候做四件事1会通过当前构造函数创建实例对象,2并且将构造函数里的this指向当前的实例对象,3(解释器自动)将内部的prototype属性给了实例对象的__proto__属性.4返回新创建的对象,js中任何函数都可以作为构造函数,函数可以将内部的属性进行很好的封装,有着良好的重用性,但是通过构造函数创建的对象,有着相同的方法,重复的方法如果重复创建的话,第一个很耗内存,第二个,可以但是没必要。(皮一下很快乐)        

这就轮到了我们的prototype出手了,我们的js为每个函数都设计了一个prototype的属性。       当我们每创建一个构造函数的时候,我们的函数拥有一个内部属性prototype,该属性自带一个指针,指向我们的原型对象,而原型对象也有一个内部属性consturctor,该属性也有一个指针指向我们其关联的构造函数。当我们通过构造函数创建实例对象的时候,每个实例对象都带一个指针指向我们其创建构造函数的prototype属性,所以构造函数里的prototype属性值,对其创建的实例对象来说是共享的。当我们多个相同的实例对象需要共同的属性或者属性值时,就将需要的属性对应在我们构造函数的原型对象里。


function Dudu( name){this.name:name;}Dudu.prototype.say=function(){  console.log(`i m ${this.name}`)}var dede=new Dudu("dudu")通过上面的方式实例对象自动获得了构造函数的原型属性。          值得一提的是原型链:当我们多个原型对象逐级继承的时候就形成了原型链我们js里的每个对象都有一个原型对象__proto__ 该属性指向我们其构造函数的prototype属性,也就是说__proto__属性可以像上一级级的查找父级元素的原型对象里的值js中默认顶层原型对象是object 他的__proto__指向就是null了,所以当我们的子级对象需要什么属性,或者需要什么值,自己没有的话可以沿着这条原型链一直查找,一直找到最顶层父对象dede.__proto__=>Dudu.prototypeDudu.prototype.__proto__=>function.prototypefunction.prototype.__proto__=>object.prototypeobject.prototype.__proto__=>null (好像是这样,忘记了)差不多就这么多

      多态是根据原型的根本来操作得,当我们原型对象得方法不是自己想要得时候,我们可以设置同名得方法,这个感觉没啥意思  就是写个同名得方法,原型链得顺序是先用自己得在去原型查找,不喜欢自己就写一个自己想要得
ok!!!!!!!!!!!!!!!!!!!!!!!!!!
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP