js学习笔记---(学习)
js中这六种值为"假",其他均为"真"_猿客奇谈
Day1
- javascript ECMAScript DOM BOM
- js里的三种输出方式
- console.log() 调试 报错
- alert()调试 提示和警告
- document.write
内存:专门用来运行程序的
程序:专门用来处理数据的 接受数据---处理数据---输出数据
- 变量:内存中专门存储数据的空间
- 变量的使用 1声明 2 命名 3初始化 4 使用
- 使用变量名就相当于使用变量里面的数据
Day2
- 变量 声明 命名 初始化 使用;
如果变量不声明直接赋值,那么js 会自动在全局作用域帮你声明
变量提升:var 关键字声明的变量会自动提升到当前作用域最顶部
允许变量重复声明;
- 数据类型:
原始(基本)数据类型:number(数字) Boolean(布尔) undefined(未定义)null(空指针对象)
String:所有的字符和标点符号都是字符串;字符与任何数据的拼接也是字符串
字符串必须是在引号里面的,只要是套在引号里面的,一定是字符串
变量是不用加引号的
引用数据类型:
- 运算符:程序用来模拟人类运算的符号
算术运算符:+-* / % ++ --
++如果单独使用 话,放前放后都是一样的
++如果在表达式中,如果放前面 先+1,在参与表达式,放后面,先用旧值参与表达式,表达式结束之后再+1
字符串连接运算符:+
变量是永远不能放在引号里面的
字符串与任何数据类型连接都得用+号,字符串与任何数据类型拼接的结果一定是字符串
关系运算符:> < >= <= == === != !==(左边是变量,右边是值,没有连续的三个比较大小)
逻辑运算符: && || !
赋值运算符:= += -= *= /= %=
- 三目运算符:条件?条件成立时候的值:条件不成立时候的值,也能做多重条件判断
- 特殊运算符:typeof 检测数据类型的
- If else表达式 if(条件){条件成立的时候执行的代码}else{条件不成立时候执行的代码}
三目运算符与 if else 表达式:if else功能比三目运算符强大,因为三目运算符只能判断一个条件,而if else你想要你可以去存值,如果你不想要值,你想要干某一件,比如说大于90时让你去执行某一段代码,但是三目运算符不行;2三目运算符是一个表达式,只能去给值,ifelse 不仅仅是给值,还能去帮你执行一段代码,这是三目运算符做不到的,但是三目运算符有自己的优势,三目运算符是一个表达式,很多条件下,if else 的使用是受限制的,if else的使用是有情景限制的,很多情况下没办使用if else的,三目没有情景限制
Js 里面的数据类型转换
显式类型转换
隐式类型转换
函数() function
Day3
NaN not a number
1.js里面的数据类型转换
显式类型转换:parseInt()
parseInt():取字符串中或者数字中以整数开头的部分,结果肯定是number
parseFloat():
toString():任何数据类型都有toString方法
隐式类型转换:布尔与字符串拼接 布尔值会自动转变为字符串 字符串与数字做拼接的时候,数字转为字符串
当布尔与数字计算的话那么布尔值 true会自动转为1 false会自动转为0
2.函数(方法):封装执行一项专门任务的代码段 方法是不调用不执行的
主动调用:函数名()
语法是:function 方法名(参数){干啥事}
day 4
NaN not a number
1.js里面的数据类型转换
显式类型转换:parseInt()
parseInt():取字符串中或者数字中以整数开头的部分,结果肯定是number
parseFloat():
toString():任何数据类型都有toString方法
隐式类型转换:布尔与字符串拼接 布尔值会自动转变为字符串 字符串与数字做拼接的时候,数字转为字符串
当布尔与数字计算的话那么布尔值 true会自动转为1 false会自动转为0
2.函数(方法):封装执行一项专门任务的代码段 方法是不调用不执行的
主动调用:函数名()
语法是:function 方法名(参数){干啥事} var 方法名=function(参数){干啥事}
参数:参数是方法内独有的变量,接受外面传入的数据,在方法内处理 参数可以让方法更灵活
如果函数声明的定义了形参,那么你在函数调用的时候就必须传实参
形参:形式上的参数
实参:实际的参数
函数的执行是没有结果的
return 的本意是退出函数的运行,;如果在return后面加数据的话,那么会在退出函数的同时返回一个结果
作业1:取三个数中最小值,不能用三目运算符
3.作用域:一个变量的可用范围
全局作用域:除了局部作用域,就是全局作用域
局部(函数)作用域:函数内!!! 局部作用域只有在函数调用的时候才创建,在函数调用结束之后立即销毁
全局变量:在全局作用域内声明的变量叫全局变量
局部变量:在局部作用域内声明的变量叫局部变量
闭包:函数使用了不属于自己的局部变量;(函数套用函数,里面的函数使用了外面函数声明的变量,这种结构叫闭包)
闭包的作用:避免全局污染。(用来保护变量的)
性能问题:内存泄漏,小用怡情,大用伤身
未声明的变量直接参与计算是不行的
正在上传…重新上传取消这个是变量提示,值是undifind
正在上传…重新上传取消用变量方式写遵从的是变量提升,用函数来写遵从的是整体提升
正在上传…重新上传取消局部作用域调用结束立即销毁
正在上传…重新上传取消闭包
Day5
数据类型:
原始数据类型:string number boolean undefined null 直接存在栈中的是原始数据类型
null:空对象指针;
null的作用 用来主动释放对象
引用数据类型:object 存在堆中的称为引用数据类型;
按照存储位置不同分为原始数据类型和引用数据类型:
栈:
堆:
批量的去管理数据
数组(array):数组就相当多个变量的集合,
数组里面是没有任何数据类型限制的。
数组都是具备下标的,从0开始
数组是有length属性的
数组是引用类型的对象
js里面的循环结构: 程序反复执行一套代码段,遇到结束条件,就停止执行;
循环三要素:1.循环条件:循环继续进行的条件,一旦条件不满足,就会停止。
2.循环变量:循环中做判断的量,循环变量一定要向着循环退出的趋势变化
3.循环体:每次循环要做的事
while(条件){条件成立时执行的代码}
for(){条件成立时执行的代码} 只要希望反复做同一件事,首先考虑循环
遍历数组的:如果要对数组的每一个元素做相同的操作,肯定for循环
在我们的if else里面 只有以下6种情况算false,其余全是true
false 0 null "" undefined NaN
day6
内置对象
Js 是一个面向对象的编程语言
面向过程
数组:多个数据的集合
对象:多个变量的集合{key:value}多个键值对的组合 对象的值是没有任何数据类型限制的 对象的属性只能是字符串(对象属性名可以不加双引号,因为他知道不加也是双引号,js会自动加上)
对象的属性名可以是变量:[属性名]
对象访问值:对象。属性名
正在上传…重新上传取消
循环:for(var key in obj){} ------遍历对象
正在上传…重新上传取消key 是变量
总结:遍历对象用for…. in循环,遍历数组用for循环
创建对象的方式:
- 数组字面量:把数组直接把列出来直接了
- 对象字面量:把对象属性直接把列出来了
构造函数
New Array
正在上传…重新上传取消
New object
正在上传…重新上传取消一般不在括号直接加数据
day6
跟字符串相关的不能直接存
西部数码,阿里云===买服务器
作业:我们自己手写一个数组排序----只排数字,不排数组
调用任何方法语法都是 对象.方法名()
对象:
内置对象:js给我们提供的现成的对象,有现成的属性和方法供我们调用 17个内置对象
基本包装类型:js基本类型和基本包装类型的区别 - 某个润滑君 - 博客园
基本包装类型:正在上传…重新上传取消
基本包装类型:string,number ,booler—是一个宏观意义不代表一个具体的值,比如公民是一个宏观的概念,你是公民,他也是,公民是一个基本包装类型,你是一个原始数据类型(你自己不具备任何关系,但是公民有权利啊)
正在上传…重新上传取消这个是window.my()调用,window是全局对象,最大的对象
1.String:字符串是不容更改的----要改变原来数据方法:要么重新存,要么直接使用,要么重新赋值
toString toUpperCase(转大写) toLowerCase(转小写) :验证码,字母模糊大小写,是使用调用这两个中的方法
重新存
正在上传…重新上传取消
直接使用
正在上传…重新上传取消
重新赋值
正在上传…重新上传取消
indexOf(查找关键字) 返回的是所查找的关键字在字符串中的下标 默认只找第一个 找不到返回-1(-1算true)(用法:直播,取名字的的时候,包括非法字符,骂人的话,可以检测)
正在上传…重新上传取消
正在上传…重新上传取消
正确是这样—推荐
正在上传…重新上传取消
但是很多网站是这样写,这种也对。
正在上传…重新上传取消
查找一个单词
正在上传…重新上传取消
字符串:也有下标,和长度
正在上传…重新上传取消
正在上传…重新上传取消
substring(截取子字符串) 含头不含尾 只给一个参数,从哪一位开始截,截到最后(取一个字符串中的一部分,有什么用途呢?比如要找到两个字名字的员工,有三个字的名字,截取后两个字)----(截取子字符串常用substring)
正在上传…重新上传取消
slice(截取子字符串) 含头不含尾--- 其实是数组的方法,不过两个亲兄弟(slice和substring两个是亲兄弟),字符串也能用----(slice在数组里面代表截取子数组)
正在上传…重新上传取消
split(切割字符串)把字符串切割成数组
正在上传…重新上传取消
正在上传…重新上传取消结果两个切割符连在一起的切的是空字符
正在上传…重新上传取消
切不开的整个
正在上传…重新上传取消
正在上传…重新上传取消
cancat()连接字符串
正在上传…重新上传取消
正在上传…重新上传取消
String.fromCharCode()把unicode编码转换为对应的字符
正在上传…重新上传取消 结果9
2.Number:
Number()
正在上传…重新上传取消
正在上传…重新上传取消
Parsrint和number区别?Parsrint是取字符串中以整数开头的部分,number是给一个纯数字的字符串,如果说带了写字符那种东西它转不了
toString
3.Boolean :toString
4.Array:数组是能改的(只要是跟字符串沾边的方法,不能改)
slice:截取子数组
正在上传…重新上传取消
cancat()
正在上传…重新上传取消
原生项目:js +jquery+UI框架:boostray
join()拼接
正在上传…重新上传取消
练习:首字母转大写
正在上传…重新上传取消
map(function(item,index){干啥事}) 循环 map是对一个数组进行处理,返回一个处理后的数组---- map接收一个函数当参数,函数默认接收两个参数,index可以省略,item是形参可以随便取
正在上传…重新上传取消必须加return,不加return数组是没法处理的,这个我得要
正在上传…重新上传取消index可以省
Map本来就是对数组每一项进行处理的,处理之后还是数组----不能改数组
For 循环不仅仅是用在数组上,其他方面上也能用,本身不是对数组进行处理的,它是具体拿到数组,如果说,需要给它还回去,还生成一个数组的话,你需要对他进行一个赋值,for循环本身不是说处理之后还是一个数组,如果你说处理之后还希望,他是原来的数组的话,需要对他进行循环,而map本身就是给你处理数组的,数组结构不变,我不动你,数组还是数组,只不过我给你每一项都给你动一动,怎么动,大括号里就写怎么动
-----------以下几种方法都可以直接修改数组---------------
push()向数组结尾追加元素 ---最常用
正在上传…重新上传取消
正在上传…重新上传取消
unshift()向数组开头追加元素 ---少用
正在上传…重新上传取消
pop()移除数组最后一位元素---少用
正在上传…重新上传取消
shift()移除数组第一位元素---少用
reverse()反转数组---不常用
正在上传…重新上传取消
sort()数组排序 unicode编码 数字 48-57 大写字母65-90 小写字母 97-122
正在上传…重新上传取消
正在上传…重新上传取消不对
正在上传…重新上传取消
正在上传…重新上传取消结果
splice(从哪一位开始删,删几位)用来插入、删除、替换元素的
正在上传…重新上传取消返回的是删除之后的元素
插入:前两个意思不变,后面都会作为新值插入进来
正在上传…重新上传取消
纯粹的插入,不删除元素
正在上传…重新上传取消
正则表达式对象
Day7
排序
正在上传…重新上传取消
//数组去重
内置对象
Math:封装了与数学计算相关的api
Math.round()四舍五入取整
正在上传…重新上传取消
正在上传…重新上传取消隐式类型转换
正在上传…重新上传取消nan
用户的输入都是字符串,只有在js定义的才是数字,HTML标签往里输入都是字符串
Math.floor()向下取整
正在上传…重新上传取消6
Math.ceil()向上取整
Math.abs()取绝对值
正在上传…重新上传取消
Math.min()/max()取最小值
正在上传…重新上传取消
正在上传…重新上传取消
Math.random()取0-1之间的随机数-----任何看到不确定的都是随机数
正在上传…重新上传取消
取任意区间内的随机数 Math.floor(Math.random()*(max-min+1)+min)
正在上传…重新上传取消
正在上传…重新上传取消
Math.sqrt()平方根
正在上传…重新上传取消
Math.pow(底数,幂)
正在上传…重新上传取消
正则表达式对象
Day8
48-57数字
65-90 大写字母
97-122 小写字母
正在上传…重新上传取消
正则表达式(RegExp):专门用来检验字符串的格式(部分匹配)
要写在//里面
[ ] 在正则表达式中是用来存放备选字符的,一个中括号只能代表一位字符的匹配规则
正在上传…重新上传取消匹配23,41,然后14不行,必须按顺序走
手机号
正在上传…重新上传取消
正则表达式对任意连续的区间。都可以以 – 连接
正在上传…重新上传取消
数量词
{num}代表前面一个跪着重复num次,如果想修饰多位,加()
正在上传…重新上传取消
正在上传…重新上传取消{}只能代表前一位规则,重复[0-9]9次
{min,} 代表前面一位规则知识重复几次
正在上传…重新上传取消
{min.max}
正在上传…重新上传取消代表前面一位规则,至少4位,最多8位
特殊数量词:? * +
?可有可无,最多一次{0,1}
*可有可无,不限制次数{0,}
+至少一次{1,}
预定义字符集:
\d代表的是所有 数字
\w代表的是所有的数字字母下划线
\s空格
.任意字符
正则表达式备选字符里如果只有一个备选字符后者只有一位预定义字符集,那么[ ]能省略;
Reg.test(被检验的字符串) 结果是布尔值 (正则表达式是部分匹配
正在上传…重新上传取消
正在上传…重新上传取消实际是不对的,但结果却是对的,原因是什么?因为正则表达式是部分匹配
$以什么结束
^以什么开头
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
Date()日期对象 不传参数, 拿到的是当前的时间
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
日期对象可以直接相减,结果是间隔毫秒数
正在上传…重新上传取消
日期对象方法:
getDate拿到是几号 num
正在上传…重新上传取消
正在上传…重新上传取消
getDay周几 num 0-6
正在上传…重新上传取消
getFullYear 哪年 num
正在上传…重新上传取消
getMonth哪月 0-11 加1 修正
getHours 0-23
getMinutes0-59
getSeconds 0-59
getMillseconds 0-999毫秒
getTime ()1970 1 1至今的毫秒数
以上所有方法把get改为set 就是设置时间 方法 没有setDay 设置月份的时候 要减1 修正
Set里面没有setday不能设置周几
Error: SytaxError(语法错误)
正在上传…重新上传取消 可能多了个, 引号
RefeRenceError(引用错误,找不到对象)
正在上传…重新上传取消没有声明
TypeError(类型错误,错误的使用了类型的方法)----工作常犯
正在上传…重新上传取消比如你是字符串,你用了数组的
RangeError(参数范围)
EvalError(解析错误) URIError
Try{可能出错的代码}catch{错误变量}{错误处理代码} ---不用前端来写,不可抗拒的
Day09
对象.属性/方法
mysql
DOMdocument object model
DOM操作:通过js去操作html和css
DOM4大操作:增删改查
1.查:查找元素
document.getElementById()返回的是元素对象--- 推荐,普遍使用
document.getElementsByclassName()返回的是一个数组---注意数组长度变化问题—返回的是动态元素---动态是元素发生变化他就会变
document.getElementsByTagName(返回的是一个数组---注意数组长度变化问题
document.getElementsByName(返回的是—个数组-----给表单用的---注意数组长度变化问题
document.queryselector( css选择器)返回的是元素对象
document.queryselectorAll(css选择器)返回的是数组---返回的是静态元素---静态是一经获取不在改变
2.改:
改属性:对象.属性名的形式去更改或者添加
setAttribute("属性名","属性值")
getAttribute("属性名")
改内容:innerText:获取元素对象里的文本内容
innerHTML 获取元素对象里的内容
3.删
元素对象.innerHTML=“”.
removeAttribute()移除属性
父元素对年.removechild(子元素对象)---(删除某一个元素对象)
4增加:
1.document.createElement("标签名")
2.向标签里面加属性和加值
3.父元素对象.appendchild(子元素对象)
5、DOM事件:
click(点击事件)
mouseover|C鼠标移入b
mouseout(鼠标移出)
onfocus(获得焦点事件
onblur(失去焦点事件)
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
document.querySelector( css选择器)返回的是元素对象 ----万能的,如果有多个,他不管只找第一个
正在上传…重新上传取消
正在上传…重新上传取消
document.querySelectorAll(css选择器)返回的是数组---找到所有的
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
2改:
- A.改属性:对象.属性名的形式去更改或者添加(本来有的改属性,没有的增加属性)
B. setAttribute("属性名","属性值)
C.getAttribute(“属性名”)获取属性
正在上传…重新上传取消
正在上传…重新上传取消
增加class属性
正在上传…重新上传取消
改样式。。。----改内联样式,原本的没改
正在上传…重新上传取消
正在上传…重新上传取消
在js里面不要以横线连接,要用驼峰试命名
正在上传…重新上传取消
- 改内容:A. innerText:获取元素对象里的文本内容(读取所有的文本内容,设置的话,里面有啥,我不管,全部删掉,换成你新的文本内容,但只认文本,不识别标签)
B. inneHTML 获取元素对象里的内容
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消写在引号里面是字符串没有关键字,字符串不用改ClassName,
正在上传…重新上传取消获取属性
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
删:
正在上传…重新上传取消直接把元素里面的内容删掉
删除属性
正在上传…重新上传取消删不彻底,属性还在id还在
删除属性
正在上传…重新上传取消
父元素对像.removechild(子元素对象)移除子元素对象---(删除某一个元素对象)不能直接删除自身
正在上传…重新上传取消
正在上传…重新上传取消
Body
正在上传…重新上传取消
移除元素里面所有东西,通过循环来删,(应对数组长度变化方法:1、i--,2、倒着循环)
正在上传…重新上传取消
增加:
正在上传…重新上传取消
正在上传…重新上传取消
事件:
正在上传…重新上传取消加小括号是方法调用的结果,但是他,没有return,值是undefined
正在上传…重新上传取消所以100%不加括号
正在上传…重新上传取消这样写是错的,从语法上讲,对象.属性名=属性值,这是个变量声明语句,所以这个地方要么跟个变量名,要么跟个匿名函数,实际上我们最多用的是匿名函数,这个方法用一遍的话,没必要去声明,用多次才声明
声明封装:
正在上传…重新上传取消
鼠标移入事件:
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消鼠标偏移对象:
焦点事件:(表单验证用到)
正在上传…重新上传取消
清除表单内容
正在上传…重新上传取消
正在上传…重新上传取消
Day10 定时器---写在全局
作业1:写一个距离下课的倒计时
作2:写—个获取验证码的例子
写一个选项卡this
定时器:I上网页无人值守的时候自动进行的操作----说白了,是让网页自动运行的一种方法
定时器是唯一的一种让网页自动运行的方法
setTimeout(干啥事,等待的毫秒数)·—次性定时器:等待一定的时间干啥事----弹窗
setInterval(干啥事,间隔毫秒数)周期性定时器:每隔多长时间干啥事-----轮播图------反复
干啥事(两个参数):要么你给一个函数名,要么你给一个匿名函数
定时器是一个异步的多线程应用
如何停止定时器:
1、clearInterval() 停2、 timer=null 释放
clearTimeout() timer=null
定时器跟页面是同步运行的
定时器是一个方法
同步单线程应用:按顺序执行,不能插队
异步多线程:餐厅有十个窗口,有多个窗口一直在同步运行,互不影响,互不干涉
Js方法任何都要用对象去调用它
定时器是window对象去调用它
this:当前正在操作的对象(谁在调用我这个函数,这个函数的this就指谁) (指向函数运行时所在的对象)
正在上传…重新上传取消当页面加载完毕的时候,才会去执行某一件事,()
函数名
正在上传…重新上传取消
匿名函数
正在上传…重新上传取消
时钟
正在上传…重新上传取消
正在上传…重新上传取消
这样写耗费性能
正在上传…重新上传取消
要这样写
正在上传…重新上传取消
停止定时器
正在上传…重新上传取消toLocaleTimeString()
正在上传…重新上传取消
距离下课
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消先声明为null(这样好处在于不占内存,而且把位置占上了),将来要调用定时器的时候,直接给timer赋值就可以了,这样把线程号给存上了(其次在赋值时候调用),以后要停定时器的时候,可以在全局任何一个地方去访问timer
window.οnlοad=function(){
var h1=document.getElementById("clock")
var target=new Date("2020-10-22 22:00:00")
function time(){
var now=new Date()
var ms=target-now;
if(ms>0){
var h=Math.floor(ms/1000/60/60)
var m=Math.floor((ms-h*60*60*1000)/1000/60)
var s=Math.floor((ms-h*60*60*1000-m*60*1000)/1000)
h1.innerHTML="距离生日还有 :"+h+"小时"+m+"分"+s+"秒"
}else{
clearInterval(timer)
timer=null;
}
}
var timer=null;//声明时,先为null,如果直接声明 timer=setInterval这个。可能声明的时候就调用,很多情况下,我们不希望声明是就调用,我们希望他在函数某个地方调用。所以
//我们声明先为null,调用在给他赋值,这样的话,我这个线程号,依旧能存,并且将来如果停的话,在任何地方都能访问到
timer=setInterval(time,1000)
}
This指向
正在上传…重新上传取消this指
正在上传…重新上传取消
正在上传…重新上传取消
更优雅
正在上传…重新上传取消
正在上传…重新上传取消this指向window
正在上传…重新上传取消默认直接值window
正在上传…重新上传取消this指window
任何方法都是有对象去调用它的
正在上传…重新上传取消这个是把值取出来了,b在调用,结果是100
正在上传…重新上传取消结果100
正在上传…重新上传取消结果10
在元素的内联元素里面去绑定的话,this指向window
正在上传…重新上传取消
正在上传…重新上传取消结果this指向window
正在上传…重新上传取消这个this指向
正在上传…重新上传取消
正在上传…重新上传取消把this当参数传进去,用途比较少
正在上传…重新上传取消this指向他自己
Day11
正在上传…重新上传取消 Netscape网景(美国计算机服务公司)了解---是我们互联网的大哥,-定制生产浏览器的第一代浏览器。---开发浏览器
正在上传…重新上传取消
正在上传…重新上传取消浏览器的版本号
正在上传…重新上传取消谷歌还有伪装苹果,是怕程序员把他抛弃了,让他执行简单代码(功能实现,效果不实现,起源苹果排在谷歌前面,谷歌跨平台的)(先判断他是不是谷歌,不是才是苹果)
原型与继承
原型(Protype):方法背后,专门保存由方法创建出来的对象的共有属性-------方法创建出来的对象: 构造方法创建出来的对象实例----
原型本质上是一个对象。
构造函数/对象模板:专门用来反复创建相同结构对象的专门方法
构造函数要求函数名要大写------- function Student{}
new Array ()、new object()、new Date()这个三个就是构造函数
var xm={name: "小明",age:18};-----自定义对象
function Student(name, age){
this.name=name;
this.age=age;
I
}
var xm=new Student( "小明",18);
var xh=new student("小红",17);
console.log(xm)
new到底敞了那4件事
1.创建一个空对象var xm={}
2.改变this指向
call/apply
3.加属性加值
{name: "小明" , age:18}
4.return xm
共有属性:由同一构造函数创建出来的对象共同享有的属性
自有属性:属I巧对象实例白身的。
任何实例对象无权修改原型中的数据,如果实例对象想直接更改,其实只是增加上了一个同名的自由属性而已
继承:使用现有类型,创建出新的类型,新的类型a以使用现有类型的属性和方法,并且可以拓展出现有类型没有的属性和方法
原型链:
Function是所有函数的父类
Error:所有错误的父类
proto_:隐式原型—个对象的隐式原型永远指向创建该对象的构造函数的原
function Student(name, age){
this.name=name;
this.age=age;
I
}
var xm=new Student( "小明",18);
var xh=new student("小红",17);
student.prototype.money=10000;------父亲的
console.log(xh.money):------10000
student.prototype.mdhey=10000;
console.log(xm); ------10000
xm. money--;
console.log(xh.money)-----10000
console.log(xm);---9999
function student(name, age){
this.name=name;
this.age=age;
}
var xm=new student("小明",18);
var xh=new student("小红",17);
student.prototype.car="bmw" ;
xm.car="benz"
I
console.log(xm.car)
student.prototype.playBas=function(){alert("我会打篮球")};
xh. playBas()
只要在对象的原型之中,加一个方法,那么这个构造函数创建出来的所有所有实例都能用,只要你在构造函数里面加一个什么属性,加一个什么方法,那么由这个构造函数创造出来的所有属性和方法,创建创建出来的所有实例都能用这个方法,
为什么我们通过new array能创建出数组方法?因为他在原型之中有这个方法,所有只要通过new东西,拿到这种对象,他当然能调用了
原型是一个属性,属性是一个对象,这个对象专门用来存放共有属性的,什么是共有属性?只有构造函数才有共有属性。什么是自有属性?由构造函数创建出来的实例,属于他自身的叫自有属性
Var peron={}i}----原型---父级:object---对象最大
var arr=[1,2,31 Ⅰ----父级:array---数值最大父亲是array
function----function ---function最大
js任何对象都是有父级的
原型链
原型链:其实就是隐式原型指向原型对象
正在上传…重新上传取消---任何对象都具有
function---父亲是大Function
是函数一定具有原型属性,原型属性指向一个对象
原型对象肯定有一个constructor属性,值指向构造函数
正在上传…重新上传取消
对象实例的原型属性指向创建该对象的构造函数原型对象
正在上传…重新上传取消
实际中有什么作用?如果说你要给这样一类对象里面都加属性的话,有个省事的方法,就是直接定义在原型之中,下面这些东西都可以去拿,在项目中,我们也不会去更改已经拥有的对象了
Dom事件:
元素对象.addEventListener("事件名","方法对象","是否在捕获阶段触发")
元素对象.removeEventListener(跟绑定的时候一模一样)
第一种方案:
正在上传…重新上传取消
第二种方案
正在上传…重新上传取消
正在上传…重新上传取消没办法实现两个给一个元素,绑定一个点击事件的
同个事件绑定多个函数-----ajax请求可能用到,要不然很少用到
正在上传…重新上传取消先绑定先执行
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消因为是匿名函数,没有名字,你找不着,所以删除不了,当你不确定需不需用的时候,那你就是不需要,当你需要的时候,自己来找他
Redux难度比vuex难
正在上传…重新上传取消
正在上传…重新上传取消
事件冒泡是从里往外冒
事件捕获是从外往里的过程
正在上传…重新上传取消一般不能在捕获阶段触发,一般给false----在背景图有按钮
正在上传…重新上传取消允许捕获阶段触发
正在上传…重新上传取消般不能在捕获阶段触发,一般给false----在背景图有按钮,this指向不明确,指向了三次
正在上传…重新上传取消
正在上传…重新上传取消IE取消冒泡
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
正在上传…重新上传取消
事件源对象:就是谁拿到我,我就触发
js学习笔记---(学习)相关推荐
- 【QT 5 学习笔记-学习绘图相关+画线图形等+绘图事件+基础学习(1)】
[QT 5 学习笔记-学习绘图相关+画线图形等+绘图事件+基础学习(1)] 1.说明 2.实验环境 3.参照学习链接 4.自己的学习与理解 5.学习与实践代码. (1)建立基础工程. (2)加入绘图事 ...
- 【QT 5 学习笔记-学习绘图相关+画图形图片等+绘图设备+基础学习(2)】
[QT 5 学习笔记-学习绘图相关+画图形图片等+绘图设备+基础学习(2)] 1.说明 2.实验环境 3.参照连接 4.自己的学习与理解 5.学习与实践代码 (1)移动图片测试实验 (1)继续之前的工 ...
- Flutter学习笔记学习资料推荐
对Flutter的学习已经有一段时间了,这里做一下总结记录,东西比较多,可能主要是一些学习资料的记录,还有一些杂七杂八的学习笔记. 文章目录 Flutter 初体验 Flutter 环境配置 Flut ...
- Flutter学习笔记学习资料推荐,大学生android开发项目实例
Flutter开发中的一些Tips Flutter开发中的一些Tips(二) Flutter开发中的一些Tips(三) 正确操作Dart中的字符串[译] Flutter三种方式实现页面切换后保持原页面 ...
- js基础笔记学习235解决xss注入攻击
- php学习笔记——学习路线图记录
PHP学习路线图 最全PHP自学指南 W3Cschool小编 2018-04-24 15:23:51 浏览数 (5381) 分享 收录专辑 对于广大零基础的PHP自学者,往往不知道如何系统的学习PHP ...
- Web前端学习笔记学习路线图
随着互联网的快速发展, web前端行业发展前景较好,虽然web前端薪资高入门门槛低, 但是俗话说的好:入门容易,精通难.web前端开发的知识点繁多,所以,要想真正全部掌握web前端工程师开发技能,并非 ...
- Flutter学习笔记学习资料推荐,手机端开发工具
打开该目录下的flutter.gradle文件修改如下内容: buildscript { repositories { //google() //jcenter() maven { url 'http ...
- UE4学习笔记:学习UE4中的UMG(图形UI设计器)工具(四):UMG中的动画
学习完了各自控件及操作后来了解控件蓝图中的动画功能 一.简单的UI动画 我们先来接触控件蓝图左下角的动画面板,首先在视觉界面中添加一个Image控件,并设置图片 在动画面板中单击+Animation, ...
- vue学习笔记学习笔记(哔哩哔哩狂神视频)
Vue Soc:关注点分离原则 HTML+CSS+JAVASCRIPT 网络通信:axios 页面跳转:vue-router 状态管理:vuex 只关心视图层 vm:数据双向绑定 计算属性 :Vue特 ...
最新文章
- pythin怎么根据月份获取月初和月末_信息流是什么?到底应该怎么去做?
- Python的线性查找(作业)
- 计算机网络cr什么意思,现在网络上的“CR”是指什么意思
- Little Elephant and Shifts(CF-220C)
- java 拦截所有路径_SpringMVC 拦截器路径怎么写
- 亚马逊云科技成为Meta关键长期战略云服务提供商;触宝科技延伸业务布局聚焦元宇宙 | 全球TMT...
- 潮流计算计算机算法研究现状,电力系统潮流计算研究现状
- 长虹电视+刷回android,【原创教程】长虹智能电视Q3T手动升级and刷机救砖教程
- delphi 数据库_Delphi数据库编程初学者指南
- 解决NBSI安装显示“MSINET.OCX组件无法加载或其中有组件失败”
- MTK机型刷机授权 固件转换 分区提取 nv备份 恢复工具教程
- 微信配网airkiss
- word表格如何显示最后一行线
- poj 1840(数的hah)
- 进程调度时间计算方式
- 录屏可以录声音吗?录制带声音的视频,这个方法轻松解决
- python3+requests+BeautifulSoup+mysql爬取豆瓣电影top250
- mysql 8 commen table expression 树查询
- 股市低迷 期权策略表现突出
- Linux 如何检测硬盘坏道?
热门文章
- 技能梳理29@蜂鸣器/马达驱动电路+485电路
- 【pip command】之 pip install
- 致小白的K210模型训练与运用
- 图像特征点匹配算法汇总
- linux下SCP命令 传输文件
- Win10_20H2_Chinese(Simplified)_x64位专业版
- R语言中的Rtools的安装以及环境变量配置
- 风格迁移1-04:Liquid Warping GAN(Impersonator)-白话给你讲论文-翻译无死角(1)
- vue中绑定style样式的方式
- 深度 | 阿里为什么不用 ZooKeeper 做服务发现?