当前位置: 首页 > 编程日记 > 正文

面向对象编程(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

相关文章:

张仰彪第二排序法_C语言中的最常用的两种排序算法你知道吗?

冒泡法排序核心思想:若有N个数从小到大排序,需进行N-1轮比较,第一轮每相邻的两个数据进行比较N-1次,最终挑选出最大的数,放到这一轮的最后位置;第二轮比较N-1-i次,挑选出这一轮最大的数&#xf…

ZOJ3203

为什么80%的码农都做不了架构师&#xff1f;>>> 用一次导数求极值&#xff0c;但是还是犯了错误&#xff0c;要判断边界条件&#xff0c;就是墙上投影值小于0和大于h的时候。 //-------common header--------------- #include <stdio.h> #include <vector…

【校招面试 之 C/C++】第16题 C++ new和delete的实现原理

1、new new操作针对数据类型的处理&#xff0c;分为两种情况&#xff1a;&#xff08;1&#xff09;简单数据类型&#xff08;包括基本数据类型和不需要构造函数的类型&#xff09;代码实例&#xff1a;int* p new int;汇编码如下&#xff1a; int* p new int; 00E54C44 pus…

C++Primer学习笔记(二)

17.string对象中字符的处理&#xff1a;cctype头文件中定义:isalnum(c)  如果c是字母或数字,则为trueisalpha(c)  如果c是字符,则为trueiscntrl(c)  如果c是控制字符,则为trueisdigit(c)  如果c是数字,则为trueisgraph(c)  如果c不是空格,但可打印,则为trueisprint(c…

Windows下Qt程序打包

Windows下Qt程序打包 将windeployqt.exe 目录添加到系统环境变量 windeployqt.exe目录如下&#xff1a; 命令行打包 1、打开命令行 2、执行打包命令 windeployqt helloworld.exe -dirdeploy -release注意&#xff0c;应用程序使用绝对路径&#xff0c;如果是d盘&#x…

c语言栈的实现以及操作_数据结构之链栈基本操作的实现详解(C语言描述)

迎新过后&#xff0c;来带领你好好学习的小软准时归来&#xff0c;快带着上次学习链表操作的记忆和我开启新的旅程吧:链栈&#xff1a;就是栈的链式存储结构&#xff0c;简称链栈。首先我们要考虑的就是链栈的存储结构&#xff0c;由于栈只是在栈顶进行插入和删除操作&#xff…

float向u8和s8的转换

为什么80%的码农都做不了架构师&#xff1f;>>> 关于float向u8&#xff0c;s8这种类型转换&#xff0c;比较内藏玄机&#xff0c;还是小心为妙&#xff0c;这种级别的优化做了不如不做。 直接float向char类型的做法是用__ftol2_sse命令完成&#xff0c;具体怎么做的…

SQL Server DB Link相关

若想通过DBlink 清空表或执行存储过程&#xff0c;可以通过这种方式Insert into table select * from table时&#xff0c;Pull 方式比Push方式快很多转载于:https://www.cnblogs.com/luhe/p/9341413.html

windows下安装程序制作

引用链接: https://blog.csdn.net/signjing/article/details/7855855 工具: 1、脚本编辑工具 hmnisedit_downcc.zip 百度云盘链接&#xff1a;https://pan.baidu.com/s/1LZ-KFqMocM30UU8eMudAnA 提取码&#xff1a;6kgf 2、编译工具 nsis3.0.4cvs.zip 百度云盘链接&#…

实测 Mysql UUID 性能(转)

网上普遍认为Mysql 使用 UUID 主键性能低下&#xff0c;甚至建议用 自增ID 作为主键并用 UUID作唯一索引的方案。但没有提供具体的数据证明使用 UUID 作为主键时性能究竟低下到何种程度。为此我专门做了测试。 测试环境&#xff1a;WindowsXP &#xff0c;内存 4G &#xf…

date类型_06076.1.0如何将ORC格式且使用了DATE类型的Hive表转为Parquet表

温馨提示&#xff1a;如果使用电脑查看图片不清晰&#xff0c;可以使用手机打开文章单击文中的图片放大查看高清原图。Fayson的github&#xff1a;https://github.com/fayson/cdhproject提示&#xff1a;代码块部分可以左右滑动查看噢1文档编写目的在CDH中使用Hive时&#xff0…

SetGet and MACRO

为什么80%的码农都做不了架构师&#xff1f;>>> Set&Get 配合private是c class里面常用的。 这样很大程度上可以对数据的存取进行控制。 最近接触了大量的struct&#xff0c;然后直接存取其中变量的代码&#xff0c;在debug 跟踪的时候颇感不便。 Set&Get直…

spark之scala快速入门

scala和java都是在jvm之上的语言&#xff0c;相对来讲&#xff0c;scala热度比较低&#xff0c;其实并不是一个特别好的语言选择。 原因倒不是因为scala本身的缺点&#xff0c;而是使用人群不够多&#xff0c;论坛和社区不够活跃。这就跟社交软件一样&#xff0c;大家都用微信&…

python 归一化_只需 45 秒,Python 给故宫画一组手绘图!

作者 | 丁彦军责编 | 伍杏玲13日早晨&#xff0c;当北京市民拉开窗帘时发现&#xff0c;窗外雪花纷纷扬扬在空中飘落&#xff0c;而且越下越大&#xff0c;树上、草地、屋顶、道路上&#xff0c;都落满雪花。京城银装素裹&#xff0c;这是今冬以来北京迎来的第二场降雪。一下雪…

Windows平台下程序打包流程

Windows平台下程序打包流程 1、所有测试完成之后、程序release编译完成 2、依赖库打包 执行deploy.bat 脚本打包最新的程序以及依赖库 3、可执行程序打包 打开打包工程文件.evb&#xff0c; 使用 enigma virtual Box 打包可执行程序 点击“执行封包”&#xff0c;开始打包 …

一个apk多个ICON执行入口

一个工程对应一个AndroidManifest.xml文件&#xff0c;这个文件中包含有该项目的一些设置&#xff0c;如权限、SDk版Activity、Service信息等。一般而言&#xff0c;这个文件中会有且仅有一个application节点&#xff0c;这个节点表示这是一个应用程序&#xff0c;不管它下面还…

vbs之CurrentDirectory

为什么80%的码农都做不了架构师&#xff1f;>>> 最近要用一下Oracle instantclient的ODBC&#xff0c;由于配置有点繁琐&#xff0c;于是打算用vbs写一脚本来自动化一下&#xff0c;刚开始是这样的&#xff1a; Set ws CreateObject("WScript.Shell") w…

详解javascript: void(0);

原文 简书原文&#xff1a;https://www.jianshu.com/p/08ae8cbeb3be 什么是javascript: void(0); 我们经常会使用到 javascript:void(0) 这样的代码&#xff0c;那么在 JavaScript 中 javascript:void(0) 代表的是什么意思呢&#xff1f;  javascript:void(0) 中最关键的是 v…

读书笔记:编写高质量代码--web前端开发修炼之道(二:5章)

读书笔记&#xff1a;编写高质量代码--web前端开发修炼之道 这本书看得断断续续&#xff0c;不连贯&#xff0c;笔记也是有些马虎了&#xff0c;想了解这本书内容的童鞋可以借鉴我的这篇笔记&#xff0c;希望对大家有帮助。 笔记有点长&#xff0c;所以分为一&#xff0c;二两个…

# Qt程序版本号使用

Qt程序版本号使用 在pro文件中添加&#xff08;版本号可以3段或者4段&#xff09; VERSION1.0.1.2DEFINES APP_VERSION\\\"$${VERSION}\\\"实际代码中使用 QString version APP_VERSION;qInfo()<<"版本信息:"<< version;

python traceback安装_Python错误:Traceback (most recent call last):感觉是软件出了问题

安装了pytest后&#xff0c;运行了一下&#xff0c;看不懂了&#xff0c;不过你前面的说对了 Testing started at 10:15 ... C:\Users\Administrator\PycharmProjects\untitled4\venv\Scripts\python.exe "D:\Program Files (x86)\PyCharm Community Edition 2018.2.4\hel…

Directx11教程(6) 画一个简单的三角形(2)

在上篇教程中&#xff0c;我们实现了在D3D11中画一个简单的三角形&#xff0c;但是&#xff0c;当我们改变窗口大小时候&#xff0c;三角形形状却随着窗口高宽比例改变而改变&#xff0c;如下图所示&#xff1a; 这是因为我们改变了窗口大小&#xff0c;但后缓冲大小在程序初始…

【单调栈 前缀和 异或】7.21序列求和

还要再细细思考的奇妙思路 题目描述 小A最近喜欢上了关于区间max的问题。她定义一个区间的价值是max(ai)(l<i<r)∗(alxoral1xor...xorar)max(ai)(l<i<r)∗(alxoral1xor...xorar)她想要知道&#xff0c;一个序列所有的连续子序列价值之和是多少。 输入格式 第一行一…

hibernate 复合主键 根据主键删除_hibernate封装Utils工具类

一&#xff1a;封装Session对象1、获取全新的Session的对象 2、获取与线程绑定的的Session的对象二&#xff1a;什么是持久化类1、Hlbernate是持久层的ORM映射框架&#xff0c;专注于数据的持久化工作。所谓的持久化&#xff0c;就是将内存中的数据永久存储到关系型数据库中。 …

Linux+Qt 下同一数据空间vfork多进程间通信的一种高效便捷方式(信号槽直接调用)

LinuxQt 下同一数据空间vfork多进程间通信的一种高效便捷方式&#xff08;信号槽直接调用&#xff09; 概述 传统的多进程间通信往往非常麻烦&#xff0c;采用的方法比如管道&#xff0c;共享内存&#xff0c;socket&#xff0c;文件等&#xff0c;大都非常繁琐&#xff0c; …

Eclipse 调试器(引用IT168)

Eclipse 调试器&#xff1a;零距离接触实战技巧 2011年11月25日01:29IT168字号&#xff1a;T|T调试的方法虽然千千万万&#xff0c;但归根结底&#xff0c;就是找到引发错误的代码。Eclipse调试器的目标是让程序员能对本地或远程程序进行错误侦测与诊断。该调试器提供所有标准调…

Cisco交换机与路由器的密码恢复_路由交换

站长原创&#xff1a;歪歪IT技术网 首发&#xff1a;迷你兔 来51cto记录一下我们net人最不喜欢记的路由器和交换机的密码恢复问题&#xff0c;虽然很简单的几个步骤&#xff0c;但是我却总是记不住&#xff0c;应该不是记不住&#xff0c;就觉得用处不大&#xff0c;但工作中…

投影转换_即插即用,办公投影不用愁:毕亚兹Mini DP转HDMIVGA转换器

日常办公的时候一些办公小件也很有用的&#xff0c;就比如说HDMI&#xff0c;VGA的转接头&#xff0c;不起眼但是很实用。去客户那里汇报工作&#xff0c;笔记本没有VGA接口&#xff0c;结果会很尴尬&#xff0c;到处借&#xff0c;没有转接头就是接不了&#xff0c;所以索性还…

事件绑定在IE下this是window的问题

昨天写一个函数的时候&#xff0c;后来用了事件绑定&#xff0c;开始没在IE下测试&#xff0c;在chrome下都是没问题的。后来在IE下测试发现出错。 后来修改一下&#xff0c;发现oBox.οnclickfunction(){}没问题&#xff0c;而addEven(oBox, "click", function(){})…

nvidia-jetson系列硬件平台上安装Qt

nvidia-jetson系列硬件平台上安装Qt 目标平台: Jetson Nano、Jetson TX2、etson Xavier NX、Jetson AGX Xavier 概述: 系统环境: 我的设备是下列环境&#xff0c;其实只要是L4T版本的应该都是可以的 镜像烧录方式&#xff1a;SDKManager 系统镜像版本&#xff1a;L4T-32.…