oop面向对象

来源:互联网 发布:遁世不见知而不悔 举例 编辑:程序博客网 时间:2024/06/01 21:03

首先是定义:什么是对象

       对象就是属性无序集合,  每个属性存放一个  原始值or对象or函数

既然是属性的无序集合,那么属性的含义顾名思义,那么属性是什么:

       属性就是一个个的键值对.     也就是   属性名:属性

       一分为二,

首先是属性名: 什么可以做属性名,  既然属性的名字,所以我们一般是用字符串来命名的,当然,如果自己乐意.也可以用 _ 数字 等这些符号.起名的时候我们一般是按规范要加引号的,当然不加也行,

其次是属性值: 任意的数据都可以保存在属性值中, 5基本3引用都可以用来做属性值.

面向对象的三个特点:封装继承多态

1.    封装 封装这个玩意,在JS中实在是简单,只要把变量 你不想让外界访问的东西放在一个function中就可以了. 变成局部变量就相当于被封装了.

特点:低耦合高内聚 减少代码冗余

2.    继承 同样简单,只要在function下写function就可以了

3.    多态, 在其他语言中,多态是指重载和重写

a)     重载:在其他语言中,两个方法的名字相同,参数不同,会认为是两个方法.

b)     重写:子类重写父类的方法.

在js中

a)    重载:不存在重载一说.JS中如果两个方法名字相同,后面的会把前面的覆盖掉

Js的多态,个人暂时认为是:一个方法,不同的对象调用他就会有不同的结果,但他们都是调用的这个方法,却产生不同的结果,所以就把这种特性叫作多态.

Ps:在其他语言中,一般是有抽象这个玩意的,即类与对象,但是js没有类,js只有对象

Js中对象的分类

1.    内置对象2.宿主对象3.自定义对象

一.    内置对象

1.     本地对象  例如:object functionarray string boolean number data

a)     本地对象它是函数, 当然,在js中函数也是一类特殊的对象(数组也是一类特殊的对象),

b)     本地对象这个函数的特殊点在于他可以用来创建对象.我们称之为构造器.   Var abc = new Array();

2.     单体内置对象

a)     单体,也就是只有一个对象

b)     Gloale对象和Math对象 在使用的时候不用加new

c)     比如 当定义一个math对象的时候我们可以这样定义,   

var a = Math()但是绝对不可以这样定义

var a = new Math();,这样是会报错的

二.  宿主对象

Js是一个脚本语言,它只能寄宿在某个环境中才能运行.即:

1.     浏览器端也就是浏览器

a)     对浏览器端的js在而言,宿主对象u是浏览器对象例如                                window,document,history 等

b)     当然,在不同的浏览器端使用也是不一样的,例如dom二级绑定事件中在ie中和其他浏览器就不一样, attachEvent()和addEventlister()

2.     服务器端 node.js等

三.  自定义对象

也就是自己写的对象

       Ps:前面说到,global对象,它在浏览器端是没有的global的,我们无法访问这个对象,所有,这玩意给自己找了个代言人:window对象   自然,你可以通过window来访问global对象

       再说window对象,这玩意因为一切皆对象,而对象里又只有属性.所以在浏览器端的js中,所有的东西都是这玩意的属性,alert,document console,array都是这玩意的属性,自然的我们定义的变量函数,最后都成了这玩意的属性

       函数创造了对象,对象就是一堆属性的集合,属性又是键值对.值就是5基本3引用,引用中的函数又能创造对象.

       三条定律一条链:三定律 一切皆对象,对象是属性的集合,对象是函数创造的一链:原型链

       下面这些东西都是对象:

a)     .console

b)     Html标签

c)     Array

d)     自定义的函数

e)     基本数据类型 这个特殊,

比如var a=3;看起来这个不是对象,但是它随时可以使用他的包装对象的方法

比如a.toString()

包装对象:

       常见的包装对象 :number string boolean

       理解这个玩意首先需要知道,我们定义一个字符串有两种

              1是字面量,即 var b = ‘abc’;

              2是构造器string 即 var b = new String(‘abc’);

       这两种方法创建的字符串是有区别的,通过字面量创建的字符串就是一个保存字符串的变量,而通过构造器创建的却是一个字符串对象.而对象是可以有方法的,所以通过构造器定义的字符串可以使用字符串对象的函数像.substr .strike .toLocaleUpperCase(转换成大写)这些方法的.

那么问题产生了,为什么字面量定义的字符串也能调用.原因是,在字面量定义的字符串b调用构造器方法的瞬间,浏览器会瞬间把b包装成用构造器创建的字符串对象,这样就能调用了,

当然这里要注意的是瞬间这个词.只有在调用的时候,浏览器才会把他当作构造器创建的对象,所以,如果你用字面量定义了一个东西,却把他当作对象,去给他添加属性,那就玩脱了.只有调用那一瞬间才是对象.

 

 

怎么操作和访问属性呢.

访问有两种方法.

1是打点 . 2是中括号[]

打点是我们常用的方法,当然他只适合复合变量命名规范的属性名,否则你就要使用中括号[‘属性名’]了在[ ]使用的时候,要注意加引号,否则会被当做变量来处理

[ ]里面可以写的东西有点多,

a)     [‘属性名’]

b)     [变量]

c)     [表达式]  例如’na’+’me’

d)      [调用函数]

注意表达式和调用函数最后肯定有一个结果,而实际上是访问 [‘这个结果’] 的

比如function f(){

       return  name;

}

       那么obj[ f() ]就等于是obj[‘ name’ ]

操作也是两种方法:

对象.属性名 = 属性值

对象[‘属性名’] = 属性值;

原创粉丝点击