[面向对象编程OOP]
 
1 语言的分类
面向机器 :汇编语言
面向过程 :c语言
面向对象 :c++ Java PHP等
 
2 面向过程与面向对象
面向过程:专注于如何去解决一个问题的过程,编程特点是一个函数去实现过程操作,没有类与对象的概念
面向对象:专注于有哪一个对象实体去解决这个问题,编程特点是:出现一个个的类,由类去生成对象
【面向对象的三大特征】
继承 封装 多态
 
类与对象的关系
1类 : 一群有相同特征(属性)和行为(方法)的集合
人类 属性:身高 ,年龄。体重, 方法:吃饭 睡觉 敲代码
2对象: 从类中,拿出的具有确定属性值和方法的个体
张三 属性 身高180 方法 说话
3类和对象的关系
类是抽象的,对象是具体的。类是对象的抽象化,对象是类的具体化
通俗来讲,类是一个抽象的概念,表示具有相同属性和行为的集合,但是类仅仅表明这类群体具有向同的属性
但是没有具体的属性值
而对象是对类的属性进行具体赋值后,而得到的一个具体的个体
 
4实用类和对象的步骤
① 创建一个类(构造函数) 类名:必须要每个单词的首字母都大写
Function 类名(属性一){
this.属性=属性一
 
 
this.方法=Function(){}
this 指向谁?即将调用当前构造函数的对象
}
② 通过类,实例化出一个新对象
var obj = new 类名(属性——value)
原构造函数中的this,指向新创建的obj对象
obj.方法(); 调用方法
obj.属性(); 调用属性
实例化对象,会执行创造函数
 
5 两个重要的属性
constructor: 返回当前对象的构造函数 只有对象才有,返回的是构造函数-类
>>> zhangsan.constructor == Person true
>>> 对象的constructor,位于_proto_原型对象上 (后续讲解)
instanceof:判断对象是否是某个类的实例
>>>zhangsan instanceof Person true
>>>preson instanceof Objiect true
>>>zhangsan instanceof Object true
 
 
6广义对象与狭隘对象
狭义对象:只有属性,方法。除此之外没有任何东西
var obj = {}; var obj = new Object();
广义对象: 除了用字面量声明的基本数据类型之外分,万物接对象,换句话说,能够添加属性和方法的变量,就是对象
 
var s = "1" 不是对象
var s = new String("1") 是对象
 
①定义一个(类)构造函数
function Person(name,age,sex){
类的属性
this.name=name;
this.age= age;
this.sex= sex;
类的方法
this.say = function(){
alert("我叫"+this.name+";今年"+this.age+"岁;"+"我是一个"+this.sex+"生")
}
}
从类中,实例化出一个对象,并给对象的属性赋值
var zhangsan = new Person("张三",18,"男");
zhangsan.say();
 
var lisi = new Person("李四",12,"男");
lisi.say();
 
var wanger = new Person("王二",14,"女");
wanger.say();
 
Person();
var arr = [Person,1,2,3]
arr[0]();
person.height = 10;
console.log(zhangsan);
console.log(zhangsan instanceof Person);
console.log(zhangsan instanceof Object);
</script>
[成员属性与成员方法]
1、在构造函数中声明,通过 this属性声明,或者实例化出对象后,通过"对象.属性"追加的,都属于成员属性、或成员方法也叫实力属性与实例方法
成员属性/方法 是属于实例化出的这个对象
通过"对象.属性"调用
 
[静态属性和静态方法]
2、通过类名.属性名 "类名.方法名"声明的变量,称为静态属性、静态方法;也叫类属性,类方法
 
类属性/类方法 是属于类的(属于构造函数)
通过"类名.属性"调用
3、成员属性是属于实例化出的对象的,会出现在新对象的属性上
静态属性是属于构造函数自己的,是不会出现在新对象的属性上
4 JS对象属性的删除
①对象无需手动删除,JS提供了一种主动释放对象内存的方法(及对象无用后,自动删除)
②删除对象的属性,delete 对象名.属性名
5 对象是引用数据类型
也就是说,当new出一个对象是,这个obj变量存储的实际上是对象的地址,在对象赋值时,负的也是地址
function Person(){}
var zhangsan = new Person();//zhangsan对象实际存的是地址,
var lisi = zhangsan // 实际上是吧zhangsan 的地址给了lisi
lisi.name = "李四"//lis通过地址,修改了对象
console.log(zhangsan.name);//张三再通过地址打开对象,实际已经变了
引用数据类型,赋值时,传递的是引用(地址)——快捷方式
基本数据类型,赋值时传递的是数据(值)
6、私有属性与私有方法
在构造函数中,通过var声明的属性。称为私有属性
function Person(){var num = 1;}
私有属性的作用域,尽在当前函数有效,对外不公开,即通过对象/类都无法调用到。
 
function Person(name){
this.name = name;成员属性
}
Person.hei = 20;静态属性
 
var zhangsan = new Person("张三");
zhangsan.age= 24 成员属性
 
delete zhangsan.name;删除对象属性
var lisi = zhangsan;
lisi.name = "李四";
 
console.log(zahngsan);
[this详解]
1、谁最终调用函数,this指向。
①this指向的,永远只可能是对象!!!
②this指向谁,永远不取决与this写在哪,而是取决于函数在哪调用
③this指向的对象,我们称之为函数的上下文context 也加函数的调用者
2、※※※※※this指向的规律(与函数调用的方式息息相关);
this指向的情况,取决于函数调用的方式有哪些
① 通过函数()直接调用:this指向window
② 通过对象.函数名()调用的,this指向这个对象
③ 函数作为数组的一个元素通过数组下标调用的,this指向这个数组
④ 函数做为window内置函数的回调函数调用; this指向window
⑤ 函数作为构造函数,用new关键字调用时,this指向新new出的对象
 
 
 
function func1(){
//this[2]=10;
console.log(this)
}
 
 
 
// ① 通过函数()直接调用:this指向window
func1();//this--->window
 
 
 
//② 通过对象.函数名()调用的,this指向这个对象
//狭义对象
var obj = {
name:"obj",
func1:func
};
obj.func1();//this--->obj
//广义对象
document.getElementById("div").onclick = function(){
this.style.backgroundColor = "red"
};//this——>div
 
 
 
// ③ 函数作为数组的一个元素通过数组下标调用的,this指向这个数组
var arr = [func,1,2,3];
arr[0]();//this--->arr数组
 
 
//④ 函数做为window内置函数的回调函数调用; this指向window
setTimeout(func,1000);//this--->window
//setInterval(func,1000);
 
 
 
⑤ 函数作为构造函数,用new关键字调用时,this指向新new出的对象
var obj = new func();//this--->>new出的新obj
 
综合小练习
var obj1={
name:"obj1",
arr:[setTimeout(func,3000),1,2,3]
}
document.getElementById("div").onclick = obj1.arr[0];
/符合规律⑤ 函数最终调用者 setTimeout this--->window
 
 
 
var obj1={
name:"obj1",
arr:[func,1,2,3]
}
document.getElementById("div").onclick = obj1.arr[0]();
符合规律③ 函数最终调用者 数组下标 this--->arr
 
 
 
var obj1={
name:"obj1",
arr:[{name:"arrobj",fun:func},1,2,3]
}
document.getElementById("div").onclick = obj1.arr[0].fun();
//函数最终调用者 {name:"arrobj",fun:func} 符合规律② this--->obj
 

面向对象 OOP的更多相关文章

  1. PHP面向对象(OOP)编程入门教程

    面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行PHP的高级编程,对于提高 PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们就 ...

  2. 【PHP面向对象(OOP)编程入门教程】1.什么是面向对象?

    面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成 ...

  3. php面向对象(OOP)编程完全教程

    摘自:http://www.php-note.com/article/detail/41 面向对象编程(OOP)是我们编程的一项基本技能,PHP5对OOP提供了良好的支持.如何使用OOP的思想来进行P ...

  4. 拖拽系列二、利用JS面向对象OOP思想实现拖拽封装

    接着上一篇拖拽系列一.JavaScript实现简单的拖拽效果这一篇博客将接着对上一节实现代码利用JS面向对象(OOP)思维对上一节代码进行封装; 使其模块化.避免全局函数污染.方便后期维护和调用:写到 ...

  5. 面向对象(OOP)基本概念

    面向对象(OOP)基本概念 面向对象编程 —— Object Oriented Programming 简写 OOP 目标 了解 面向对象 基本概念 01. 面向对象基本概念 我们之前学习的编程方式就 ...

  6. python-面向对象-01_面向对象(OOP)基本概念

    面向对象(OOP)基本概念 面向对象编程 —— Object Oriented Programming 简写 OOP 目标 了解 面向对象 基本概念 01. 面向对象基本概念 我们之前学习的编程方式就 ...

  7. [Python_4] Python 面向对象(OOP)

    0. 说明 Python 面向对象(OOP) 笔记.迭代磁盘文件.析构函数.内置方法.多重继承.异常处理 参考 Python面向对象 1. 面向对象 # -*-coding:utf-8-*- &quo ...

  8. PHP面向对象(OOP)编程入门教程链接

    PHP官方学习OOP: http://php.net/manual/zh/oop5.intro.php 从其他博主学习:(以下链接来源: http://blog.snsgou.com/post-41. ...

  9. Python3中面向对象 OOP

    Python3中面向对象 OOP 定义: python中通过关键字 class 实现类的定义: class ClassName(object): pass 获取成员变量:ClassName.变量名 修 ...

  10. 如何吃透Python的面向对象(OOP)

    ​本篇可乐和大家一起来吃透 Python 的面向对象,类和实例. 面向对象(OOP) 解释:面向对象它是一种编程的思想,将现实事物抽象化为编程对象. 举例说明:喝可乐 ① 选择自己根据配方买对应的材料 ...

随机推荐

  1. ie8在win7系统下怎么安装或重装?[转载]

    (一)对于已卸载了IE8的用户 因为微软并没有提供用于Windows 7系统的IE8独立安装包,Windows 7用户是无法通过下载安装包的方法来重装IE8的,而是默认将IE8的安装程序集成在Wind ...

  2. 【题解】 UVa11729 Commando War

    题目大意 你有n个部下,每个部下需要完成一项任务.第i个部下需要你花Bj分钟交代任务,然后他就会立刻独立地.无间断地执行Ji分钟后完成任务.你需要选择交代任务的顺序,使得所有任务尽早执行完毕(即最后一 ...

  3. Java 访问修饰符使用规则

    作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 1. ...

  4. [TJOI2007] 线段

    因为每行必须走完才能到下一行,所以我们有两种决策: 1.最后留在线段左端点 2.最后留在线段右端点 这种存在状态转移且多决策的问题用动态规划来进行递推是最好不过的了. 所以我们设\(dp[i][0/1 ...

  5. CryptoJS导入sha加密包出现错误

    Uncaught TypeError: Cannot read property 'extend' of undefined at sha224.js:12 at sha224.js:60 Uncau ...

  6. Docker 下系统日志恢复

    众所周知,docker 是一款进程级虚拟机.上文我们已经分析解释了该如何使用,本文针对日志消失问题进行恢复与解释. Docker 可以理解为阉割版的系统,内部功能不全.可以通过组件安装进行基本功能恢复 ...

  7. 如何 3D 打印一个密码锁

    简评:这篇文章介绍怎么用 3D 打印机做一个密码锁,巧妙地利用机械结构的变化实现锁的功能,相当有趣! 3D 打印机非常适合打印静态物体.如果你够聪明,还可以打印出功能物件.如果你特别特别聪明,那你能做 ...

  8. uC/OS-II 函数之时间相关函数

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 对于有热心的小伙伴在微博上私信我,说我的uC/OS-II 一些函数简介篇幅有些过于长应该分开介绍.应小伙伴的要求,特此将文章分开进行讲解.上文主要 ...

  9. 2019年华南理工大学程序设计竞赛(春季赛)A NB群友

    https://ac.nowcoder.com/acm/contest/625/A 题意:给出一个区间范围 , 求有多少个数的每一位的积是在这个区间里面的 分析:没错了 ,就是记忆化暴力搜索 ,不断的 ...

  10. Oracle 常用语句备份

    1.oracle 11g 用户名和密码默认区分大小写,可更改alter system set sec_case_sensitive_logon=false 设置改为不区分大小写. 2.授权创建视图:G ...