面向对象编程(OOP)----BLUE大师JS课堂笔记(二)
一,把面向过程的程序改写成面向对象的程序
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课堂笔记(二)相关推荐
- 【廖雪峰Python学习笔记】面向对象编程OOP
面向对象编程 OOP:Object Oriented Programming 程序的基本单元:对象 [ = 数据 + 操作数据的函数] [属性 + 方法] 三大特点:数据封装.继承和多态 OPP中的计 ...
- 面向对象编程OOP的三大特性
面向对象的三个基本特征是:封装.继承.多态. 封装 封装最好理解了.封装是面向对象的特征之一,是对象和类概念的主要特性. 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类 ...
- python oop编程_23 Python - 面向对象编程OOP
面向对象编程OOP 01 方法__repr__()和__str__() __repr__()方法类似java中的toString方法,用于反馈类的相关信息且可以自己定义,一般用于开发人员控制台调试 _ ...
- 学习面向对象编程OOP 第一天
面向对象编程 Object Oriented Programming 一.什么是面向对象编程OOP 1.计算机编程架构; 2.计算机程序是由一个能够起到子程序作用的单元或者对象组合而成.也就是说由多个 ...
- 面向对象编程(OOP)和函数式编程(FP)的思考
最近看过不少 JavaScript 的类(实际是嵌套 function),自己也写了一些,发现一个值得思考的问题. 有的作者可能为了提高一点性能,喜欢有事没事把方法里面的某个变量做成类的字段(attr ...
- [转载] Python3基础:08_02_面向对象编程(OOP)——类和对象
参考链接: Python中的面向对象编程OOP | 3(继承,对象示例,issubclass和super) 0.前言 这篇博文将讲述Python面向对象开发中的类与对象的概念,包括对类和对象的理解 ...
- S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则
注:以下图片均来自<如何向妻子解释OOD>译文链接:http://www.cnblogs.com/niyw/archive/2011/01/25/1940603.html <How ...
- python oop求三角形面积公式_Python面向对象编程-OOP
Python面向对象编程-OOP 20141216 Chenxin整理 OOP的3大特性: 封装,继承,多态 一.封装 OOP目的,OOP为了代码重用 :分解代码 ,最小化代码的冗余以及对现在的代码进 ...
- opp原则_面向过程编程(OPP) 和面向对象编程(OOP)的关系
面向过程编程(OPP) 和面向对象编程(OOP)的关系 原文链接:http://blog.csdn.net/phphot/article/details/3985480 关于面向过程的编程(OPP)和 ...
最新文章
- iphone退款申请教程_王者荣耀账号注销退钱吗?王者荣耀账号注销100%退款教程...
- 高通平台耳机插拔检测
- The whole Fiori application is wrapped in a big shell xml view
- 指的是什么意思_扈三娘的外号一丈青,到底指的是什么意思?
- shell之通过if [ $? != 0 ]判断上次程序是否执行成功
- 初三学生什么时候上一对一效果最好?
- H5页面--Android滑动屏幕图片误触
- VS2019下安装NumCpp库小结
- 尴尬又暖心!学生知乎上提问导师人品如何,没想到导师亲自回答了...
- python3 datatime,python3处理时间和日期:datetime模块 – Python3教程
- 8uftp,8uftp使用教程图解
- mac 长时间锁屏后进入无声音
- 定义客户类(Customer): 1,客户类的属性包括:姓名、年龄、电话、金钱数量、账号、密码; 2,方法包括:购买商品、付款、显示自己的信息。 3,创建测试类,在main方法中使用客户类创建两个客户
- python求方差函数_python求均方差
- 古琴岭南派传承人:古琴是精品教育 传承无需操之过急
- 【云计算的1024种玩法】使用阿里云+微擎打造微信公众号管理系统
- 字符串、bute[]数组和十六进制字符串的相互转换
- 论文《Contrastive Learning for Sequential Recommendation》
- 最全的WiFi速率对应表(802.11b、802.11g、802.11a、802.11n、802.11ac、802.11ax)及速率计算方法
- android博客集合