[面向对象编程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. 用Docker自动构建纸壳CMS

    纸壳CMS可以运行在Docker上,接下来看看如何自动构建纸壳CMS的Docker Image.我们希望的是在代码提交到GitHub以后,容器镜像服务可以自动构建Docker Image,构建好以后, ...

  2. centos 7 安装mysql5.6rpm格式

    1查看是否安装了mysql   rpm -qa|grep -i mysql 如果安装了请卸载:rpm -e --nodeps MySQL... 2.没有安装则进行如下操作 下载mysql rpm ta ...

  3. ANE-IOS与AS的互通

    从AS调用IOS的函数与传参数 extContex是ExtensionContext的实例,通过call调用.第一个参数是IOS对应的函数,之后所有的参数会变成一个数组传入IOS中.也就是说函数名称后 ...

  4. solidity 合约间调用以及参数传递

    在 以太坊中合约间是可以相互调用,并且正常进行参数传递以及返回值处理. contract1.sol pragma solidity ^0.4.0; contract Test1 { uint256 p ...

  5. Oracle彻底卸载

    Oracle彻底卸载 卸载:oracle卸载1.删除注册表:打开注册表:regedit 打开路径: <找注册表 :开始->运行->regedit> HKEY_LOCAL_MAC ...

  6. 爬虫开发python工具包介绍 (2)

    本文来自网易云社区 作者:王涛 可选参数我们一一介绍一下: 参数 释义 示例 params 生成url中?号后面的查询Key=value 示例1: >>>payload = {'ke ...

  7. PageAdmin环境配置要求

    1.操作系统要求: Win7/win8/win2008/win2012及以上版本都可以,建议用64位的操作系统,服务器建议选择win2012或以上版本. 2.net framework版本要求: ne ...

  8. leetcode-812-Largest Triangle Area

    题目描述: You have a list of points in the plane. Return the area of the largest triangle that can be fo ...

  9. Linux的vim和vi编辑器

    vim和vi的基本介绍 所有的Linux 系统都会内建vi 文本编辑器. Vim 具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计. 代码补完.编译及错 ...

  10. 4.1、支持向量机(SVM)

    1.二分类问题 在以前的博客中,我们介绍了用于处理二分类问题的Logistic Regression算法和用于处理多分类问题的Softmax Regression算法,典型的二分类问题,如图: 对于上 ...