一,把面向过程的程序改写成面向对象的程序

1.前提   所有的程序都在onload里面

2.改写   不能函数嵌套,可以全局变量

3.onload-------------------->构造函数

全局变量------------------->属性

函数----------------------->方法

需要用到面向对象比较多的是游戏公司

4.改错,重点是this

this啥时候出问题呢?1.定时器   但凡定时器中的this都是指的是window

2.事件

解决这个方法   var _this=this;

然后通过闭包传递this

二,JSON更适合只生成一个JSON对象的情况

命名空间:JSON里面套JSON

var obj = {a:5,b:12,c:function(){

alert(this.a);

},d:{e:function(){

alert(this.f);

},f:34}};

三,继承

在PHP中表现继承的方式如下:

 1 class Person{
 2     function __construct($name,$sex)
 3     {
 4          $this->name=$name;
 5          $this->sex=$sex;
 6     }                                              //定义类的属性
 7     function showName()
 8     {
 9         echo $this->name;              //定义类的showName方法
10     }
11     function showSex()
12    {
13         echo $this->sex;                 //定义类的showSex方法
14    }
15 }
16
17 class Worker extends Person{
18     function __construct($name,$sex,$job)
19     {
20           parent::__construct($name,$sex);   //调用Person构造                           函数,继承Person
21     }
22 }

在这个过程中,分为两部,一,定义Person类的属性和方法  二,定义worker类,并调用Person类(继承)

JS中的继承与这个过程类似:先执行父级的构造函数,然后再添加子类的属性和方法

JS中的继承的写法:

 1 function Person(name,sex)
 2 {
 3        this.name=name;
 4        this.sex=sex;
 5 }                                            //定义构造函数
 6 Person.prototype.showName=function()
 7 {
 8       alert(this.name);
 9 };                                         //添加showName方法
10 Person.prototype.showSex=function()
11 {
12       alert(this.Sex);
13 };                                         //添加showSex方法
14
15 function Worker(name,sex,job)
16 {
17       Person.call(this,name,sex); //构造函数伪装,把Worker实例伪装成Person实例,来继承Person的属性
18       this.job=job;    //单独定义自己的属性
19 }
20
21 Worker.prototype=Person.prototype; //把Person.prototype指针赋给Worker.prototype
22
23 Worker.prototype.showJob=function()
24 {
25       alert(this.job);
26 };      //定义自己的方法

call改变函数执行的this

在JS中全部对象都是引用,因此上面这段代码中的21行Worker.prototype=Person.prototype;是引用的一个对象,当

 Worker.prototype.showJob=function()
 {
       alert(this.job);
 }; 

给Worker.prototype.showJob时就相当于Person.prototype也有showJob方法了,这样不好,把父级都给覆盖了,因此为了解决这个问题要想办法不要把对象引用要复制,通过下面这段代买就能很好地解决这个问题

for(var attr in Person.prototype)
{Worker.prototype[attr]=Person.prototype[attr];
}

这样就相当于把Person.prototype复制了一份给Worker.prototype,这样给Worker.prototype加一个方法就不会影响到Person.prototype了。

而如果整站都需要作出改变,那只要修改父级就可以了,这样会很方便,不容易出错。

四,instanceof     ...是...的实例

五,系统对象:1,本地对象(非静态对象):需要实例,需要new  -----------Object,Function,Array,String,Boolean,Number,RegExp,Error

2.内置对象(静态对象):   不需要实例化,直接可以用,不需要new -------------global     Math

3.宿主对象:BOM DOM

转载于:https://www.cnblogs.com/ggbd-lie/archive/2012/11/22/2782651.html

面向对象编程(OOP)----BLUE大师JS课堂笔记(二)相关推荐

  1. 【廖雪峰Python学习笔记】面向对象编程OOP

    面向对象编程 OOP:Object Oriented Programming 程序的基本单元:对象 [ = 数据 + 操作数据的函数] [属性 + 方法] 三大特点:数据封装.继承和多态 OPP中的计 ...

  2. 面向对象编程OOP的三大特性

    面向对象的三个基本特征是:封装.继承.多态. 封装 封装最好理解了.封装是面向对象的特征之一,是对象和类概念的主要特性. 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类 ...

  3. python oop编程_23 Python - 面向对象编程OOP

    面向对象编程OOP 01 方法__repr__()和__str__() __repr__()方法类似java中的toString方法,用于反馈类的相关信息且可以自己定义,一般用于开发人员控制台调试 _ ...

  4. 学习面向对象编程OOP 第一天

    面向对象编程 Object Oriented Programming 一.什么是面向对象编程OOP 1.计算机编程架构; 2.计算机程序是由一个能够起到子程序作用的单元或者对象组合而成.也就是说由多个 ...

  5. 面向对象编程(OOP)和函数式编程(FP)的思考

    最近看过不少 JavaScript 的类(实际是嵌套 function),自己也写了一些,发现一个值得思考的问题. 有的作者可能为了提高一点性能,喜欢有事没事把方法里面的某个变量做成类的字段(attr ...

  6. [转载] Python3基础:08_02_面向对象编程(OOP)——类和对象

    参考链接: Python中的面向对象编程OOP | 3(继承,对象示例,issubclass和super) 0.前言   这篇博文将讲述Python面向对象开发中的类与对象的概念,包括对类和对象的理解 ...

  7. S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则

    注:以下图片均来自<如何向妻子解释OOD>译文链接:http://www.cnblogs.com/niyw/archive/2011/01/25/1940603.html <How ...

  8. python oop求三角形面积公式_Python面向对象编程-OOP

    Python面向对象编程-OOP 20141216 Chenxin整理 OOP的3大特性: 封装,继承,多态 一.封装 OOP目的,OOP为了代码重用 :分解代码 ,最小化代码的冗余以及对现在的代码进 ...

  9. opp原则_面向过程编程(OPP) 和面向对象编程(OOP)的关系

    面向过程编程(OPP) 和面向对象编程(OOP)的关系 原文链接:http://blog.csdn.net/phphot/article/details/3985480 关于面向过程的编程(OPP)和 ...

最新文章

  1. iphone退款申请教程_王者荣耀账号注销退钱吗?王者荣耀账号注销100%退款教程...
  2. 高通平台耳机插拔检测
  3. The whole Fiori application is wrapped in a big shell xml view
  4. 指的是什么意思_扈三娘的外号一丈青,到底指的是什么意思?
  5. shell之通过if [ $? != 0 ]判断上次程序是否执行成功
  6. 初三学生什么时候上一对一效果最好?
  7. H5页面--Android滑动屏幕图片误触
  8. VS2019下安装NumCpp库小结
  9. 尴尬又暖心!学生知乎上提问导师人品如何,没想到导师亲自回答了...
  10. python3 datatime,python3处理时间和日期:datetime模块 – Python3教程
  11. 8uftp,8uftp使用教程图解
  12. mac 长时间锁屏后进入无声音
  13. 定义客户类(Customer): 1,客户类的属性包括:姓名、年龄、电话、金钱数量、账号、密码; 2,方法包括:购买商品、付款、显示自己的信息。 3,创建测试类,在main方法中使用客户类创建两个客户
  14. python求方差函数_python求均方差
  15. 古琴岭南派传承人:古琴是精品教育 传承无需操之过急
  16. 【云计算的1024种玩法】使用阿里云+微擎打造微信公众号管理系统
  17. 字符串、bute[]数组和十六进制字符串的相互转换
  18. 论文《Contrastive Learning for Sequential Recommendation》
  19. 最全的WiFi速率对应表(802.11b、802.11g、802.11a、802.11n、802.11ac、802.11ax)及速率计算方法
  20. android博客集合

热门文章

  1. 伍六七带你学算法 入门篇-最长回文串
  2. 大数据中用到的新的数据类型bigint、decimal、smallint、tinyint
  3. 2022-2028年中国数字电视产业投资分析及前景预测报告(全卷)
  4. mysql同事包含_mysql 包含关系处理
  5. 电脑蓝屏问题检查、解决、
  6. LeetCode中等题之两两交换链表中的节点
  7. EyeQ进展The Evolution of EyeQ
  8. 将人工智能模型压缩到微控制器中
  9. 用测试驱动开发状态机
  10. 目标检测数据集The Object Detection Dataset