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’ ]
操作也是两种方法:
对象.属性名 = 属性值
对象[‘属性名’] = 属性值;
- [oop] 面向对象由浅入深
- 面向对象(OOP)
- OOP 面向对象系列
- 面向对象 OOP 解释
- 面向对象 --OOP
- 面向对象编程(OOP)
- 面向对象笔记(OOP)
- 面向对象 java oop
- OOP--面向对象编程
- OOP面向对象编程
- 面向对象oop
- OOP 面向对象编程
- oop面向对象
- 面向对象 oop
- C++ OOP面向对象
- OOP:面向对象编程
- 面向对象(OOP)笔记
- OOP-面向对象编程
- 一、Servlet基础
- jQuery选择器之表单元素选择器
- graph确定是否有循环
- AWT如何关闭窗口
- 卸载安装查看TensorFlow
- oop面向对象
- Codeforces Round #415 (Div. 2) C. Do you want a date?
- 从 SharedPreferences 中读取数据
- Python灰帽子学习笔记(一)—— pydbg软钩子部署
- 为什么onPreviewFrame()回调上来的YUV数据大小出错
- TensorFlow变量初始化
- android 修改framework下资源文件后如何编译,androidframework
- for in
- 可能是最全的git忽略文件规则.gitignore文件