定时器this指向window
javascript 的执行过程 预解析(变量)
数据集和功能集---- 对象
对象----属性和方法 -------------------面向对象------------------------
面向对象是一种编程思想,把我们要做的复杂事物中的 所有内容都抽象成一些对象,通过处理这些对象的关系 完成我们要做的事情 面向对象好处:1.方便多人协同开发 2.便于后期代码维护 注意:面向对象只是对面向过程代码的封装, 并不能替代面向过程的开发方式 面向对象三要素: 封装 继承 多态(抽象) -------将现实中的事物 抽象为代码中的属性 和 方法 的无序集合------- ---------对象: 就是将现实事物抽象为功能代码. 将现实世界的东西,用对象的语法格式来表示....---------- -----------------对象三种写法----------------------
对象字面量 方式创建(重点 较为常用) - 对象字面量:是封闭在花括号对 {} 中的一个对象的0个或多个 键:值 无序列表
- 键:相当于属性名
- 值:相当于属性值,可以是任意类型的值(数值类型、字符串类型、布尔类型,甚至 函数类型) 1.对象字面量
var star = {
name : '刘德华',
age : 18,
sex : '男',
sayHi : function(){
alert('大家好啊~');
}
}; - Object() 是构造函数 第一个字母大写 - new Object() 是调用构造函数 因为构造函数需要new 来调用 同时再内存中创建一个对象
- 注意里面使用的时候用点 不是 冒号 2.new Object 创建对象 var stuObj = new Obect();
stuObj.name = 'james';
stuObj.age = 11;
stuObj.sex = true;
stuObj.sayHi = function(){
alert('大家好啊~');
}
自定义构造函数 1. 构造函数用于创建某一大类对象,首字母要大写。 2. 构造函数要和new一起使用才有意义。 function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
this.sayHi = function() {
alert('我的名字叫:' + this.name + ',年龄:' + this.age + ',性别:' + this.sex);
}
}
var bigbai = new Person('大白', 100, '男');
var smallbai = new Person('小白', 21, '男');
console.log(bigbai.name);
console.log(smallbai.name); -----------什么是对象?------------
代码中的对象是一些属性和方法的无序集合
抽述现实世界中的一些事物,用来描述一个特定的具体的事物,是某一个具体事物的抽象 -----创建对象-------
new Object () {} 创建的对象 类型都是 object 无法用于具体对象类型的判断 如何判断对象的类型? X instanceof Y 判断X对象是否是 被Y构造创建出来 -----构造函数------
构造函数的作用:创建对象(被new构造函数创建出来的对象 又被叫做 实例)
1.创建一个空对象
2.让this 指向刚刚创建好的空对象
3.执行构造函数内的代码 (为相关的属性和方法赋值)
4.返回创建好的对象
new 一个对象的过程 就是实例化一个对象
new出来的对象就是一个实例(对象) 构造函数中的this指行当前 new出来的对象(实例)
constructor属性 用来获取创建当前对象的构造函数名 可以用来判断对象的类型 -----静态成员和实例成员------ 实例成员:使用实例对象(实例)来调用的属性和方法(只能使用new创建出来的对象)
静态成员:只能使用构造函数名进行 调用和 创建的 属性或者方法 -----构造函数的原型prototype属性--------- 构造函数的原型属性 构造函数名prototype
prototype主要用来访问 创建对象的构造函数的原型对象的中成员
通过构造函数创建的对象 可以访问 构造函数的prototype中的成员
利用构造函数的prototype属性可以给构造函数 增加 属性或者方法 -------对象的原型---------------- __proto__是对象的原型属性等同于 这个对象的构造函数的prototype原型属性
对象可以访问 原型属性(指的是构造的原型)中的任何成员 对象的成员查找规则:
当我们使用对象调用 方法或者 属性的时候, 对象会先到 创建它的构造函数中去查找属性或者方法 如果构造函数 中不存在 则去 构造函数的prototype中去查找 如果还没有找到 则报错
__proto__属性具有兼容问题 属于非标准属性 --------注意点----------- 当我们设置 构造函数原型对象时候 可以 直接赋值一个对象给 构造函数的prototype属性
注意:
1.如果我们是直接给prototype属性赋值对象 则需要 冲新设置constructor属性
2.如果在实例中需要使用修改以后的prototype属性中的成员则 需要先修改 当前构造函数的prototype属性 再 去创建对象 先修改后创建 -----------正确的写法----------------
function Person (name, age) {
this.name = name
this.age = age
} Person.prototype = {
constructor: Person, // => 手动将 constructor 指向正确的构造函数
type: 'human',
sayHello: function () {
console.log('我叫' + this.name + ',我今年' + this.age + '岁了')
}
} ----------自调用函数-------------------
自调用函数(function() {})()
Window.方法名 = 要被外界访问的方法名 -----------bind----------
bind可以改变函数中this指向 函数其实也是一种对象
函数的bind()方法 主要用于修改 函数中this的指向,并且返回一个新的函数
不会调用函数 函数.bind(要指向的对象)方法中第一个参数用于设置 调用bind的函数中this的指向对象 当函数调用bind方法以后 ---------函数的call----------
call 可以用改变this指向,,指向call 可以用来调用函数 function fn(x, y) {
console.log(this);
console.log(x + y);
} var o = {
name: 'zs'
}; fn.call(o, 2, 3); ----------自调用函数问题----------
自调用函数 前面或者后面必须加分号
函数表达式声明的时候也必须加分号 自调用函数参数的作用(window,undefineg) 自调用函数中使用 参数 window去代替window对象 在代码 压缩时候可以进行压缩 为我们压缩 为我们节约代码空间 在自调用函数中使用undefined 主要是为了兼容 旧版本浏览器 --------if中的函数不会提升---------
//命名函数和函数表达式 声明区别:
//1,命名函数,(函数声明)在执行时候由于 预解析的原因 所以 书写顺序没有要求 函数调用任何位置 //2函数表达式 在调用的时候 必须遵循先声明后使用 //3.命名函数 在新版本浏览器 的if语句中 不会被预解析 命名函数 在旧版本的IE 的if语句 存在被预解析的问题 函数表达式 声明 在新版本浏览器中都不会被预解析 ------------------this的指向-------------------------------------------
1.在普通函数中this指向 window
2.在对象的方法中this指向当前方法所属的对象
3.在构造函数中的this指向 当前构造函数创建对象
4.在定时器 函数中this指向window
5.在事件处理函数中this 指向 当前事件处理函数所属对象
总结:谁调用 this就指向谁 -------------函数的调用形式:------------------------------------------
普通函数调用 window.函数名()
对象的方法调用 对象.方法名()
构造函数 调用 new 构造函数名()
事件处理函数 DOM对象.事件名=function(){}
定时器的函数 setInterval (function(){},3000); ----------------apply---------------------------------- var arr = [1,2,3,4,5,6];
console.log(Math.max.apply(null.arr));// var arr=[1,3,4,67,5];
console.log.apply(console,arr);//1 3 4 67 5
apply方法 用于函数调用 并且 改变 函数中this的指向 不会调用函数 第一个参数:用于设置 函数中 this 要指向的对象
第二个参数:要调用函数的参数组成的数组 列如:Math.max.apply(Math,[1,2,3]) -----------------bind--------------------- bind 方法 返回一个新的函数 并且改变this的指向,不会调用函数
1.bind方法 第一个参数 用来设置this要指向的对象
2.如果需要返回的函数 具有参数 则可以通过bind方法 第二个参数以后 进行传递实参 -----------------call----------------------- 1.call方法的第一个参数 用来设置this 要指向的对象
2.如果需要调用的函数 具有参数 则可以通过call方法 第二个参数以后 进行传递参数 第二个参数开始 都是函数需要的实参 可以多个参数 call方法用途:
可以用来实现 借用构造函数继承属性
call方法还可以用于 借用内置对象的方法 列如:Array.prototype.push.call(要借用内置对象方法的伪数组,push方法的参数) ------------------高阶函数---------------
1.作用参数传递的函数
2.作为返回值返回的函数 --------函数其他成员------------- - arguments
- 实参集合
-
caller
- 函数的调用者
-
length
- 形参的个数
-
name
- 函数的名称 ---------sort升序降序--------------
var arr=[12,44,566,131,1327,2,133]
arr.sort(function(a,b){return a-b});
console.log(arr); ---------闭包------------
在两个嵌套作用域中
<子作用域访问父作用域中的变量> 内层作用域访问外层作用域的的变量 或 函数 闭包的作用:可以让我们利用函数的作用域保存一些我们需要的变量
1.可以解决定时器中无法保存变量问题
2.节约代码量 Closure 闭包 闭包特点:延展函数的作用域
闭包缺点:占用内存 ----------定时器---------
script标签中的代码被放到 执行栈中 执行
定时器的函数以及 事件处理函数 的代码 会被放到 任务队列中执行 ------------函数的创建方式--------------------
1.命名函数 function 函数名(){}
2.函数表达式
3.自调用函数
4.以对象 new Function() 命名函数和 函数表达式区别: -------if中的函数不会提升---------
//命名函数和函数表达式 声明区别:
//1,命名函数,(函数声明)在执行时候由于 预解析的原因 所以 书写顺序没有要求 函数调用任何位置 //2函数表达式 在调用的时候 必须遵循先声明后使用 //3.命名函数 在新版本浏览器 的if语句中 不会被预解析 命名函数 在旧版本的IE 的if语句 存在被预解析的问题 函数表达式 声明 在新版本浏览器中都不会被预解析 自调用函数的参数的作用(window、undefined) (function(w, undefined))(window ,undefined) 自调用函数中使用 参数 window 去替代 window 对象 在代码 压缩的时候可以进行压缩 为我们节约 代码空间 在自调用函数中使用参数 undefined 主要是为了兼容 旧版本的浏览器 继承:
通俗含义:子承父业 通过 对父类型 抽象出一些子类型共有的 属性 让子类型进行继承,提升代码的复用 javascript中实现继承的方式: 1. 对象与对象之间的继承-》 对象的拷贝
存在的问题: 对象与对象之间无法实现 类型的继承 2. 原型继承 -- 通过对 构造函数的 prototype进行 重新赋值,赋值为父类型 实现对父类型的继承
存在的问题: 无法对父类型中的属性进行重新赋值 ,一般情况使用比较少,主要用于对 对象方法的 继承 3. 借用构造函数 通过 在子类型的构造函数中 使用 call方法 对父类型构造函数进行 调用 完美实现 子类型对 父类型所有 属性的继承
存在的问题: 使用借用构造函数 无法 继承 父类型 构造函数原型中的 方法 4.组合继承 = 原型继承(继承父类型的方法) + 借用构造函数继承(继承父类型的属性) 存在的问题: 通过原型继承过来的父类型的方法 是所有 子类型都可以 进行调用的 并且 如果子类型重新对自身的 原型对象进行了修改 会影响 父类型的原型 ---------------递归-----------------
递归:函数自己调用自己的过程
缺点:不好阅读,消耗内存 ---------------------浅拷贝---------------- 浅拷贝:当我们对 对象进行属性和方法拷贝的时候,浅拷贝只能复制 对象中简单数据类型 而<复杂数据类型 的属性 则只拷贝引用> 浅拷贝不会拷贝对象属性中的对象 而只拷贝 地址(引用) 只会拷贝对象地址(不会复制新的对象)
浅拷贝-只拷贝对象的第一层属性 --------------------深拷贝----------------------- 深拷贝-拷贝的是 属性中真实的对象 而不是引用 拷贝对象的时候 还要将对象中的 复杂数据类型实现完全拷贝 ------------------回调函数--------------- 指的是 当a函数作为b函数d参数传递的时候 只有当b函数执行完成以后 才执行a函数 此时a函数就是b函数的回调函数 -------------------正则表达式---------
什么是正则表达式?
一组用于查找 特定字符串 的规则/模式 正则表达式的作用: 1.匹配 给定的字符串是否符合正则表达式的过滤逻辑 2.提取 可以通过正则表达式,从字符串中获取我们想要的特定部分 3.替换 强大的字符串替换能力 正则表达式特点: ----------常用元字符----------- ctrl+f 查找
ctrl+r 开启正则表达式
<.+?> 找到所有标签 \d 匹配数字 \D 匹配任意非数字的字符 \w 匹配字母或数字或下划线 \W 匹配任意不是字母,数字,下划线 \s 匹配任意的空白符 \S 匹配任意不是空白符的字符 . 匹配除换行符以外的任意单个字符 ^ 表示匹配行首的文本(以谁开始) $ 表示匹配行尾的文本(以谁结束) 限定符 说明 * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n到m次 验证手机号: ^\d{11}$
验证邮编: ^\d{6}$ 验证日期 2012-5-01
^\d{4}-\d{1,2}-\d{1,2}$
验证邮箱 xxx@itcast.cn:
^\w+@\w+\.\w+$
验证IP地址 192.168.1.10
^\d{1,3}\(.\d{1,3}){3}$ [] 字符串用中括号括起来,表示匹配其中的任一字符,相当于或的意思 [^] 匹配除中括号以内的内容
\ 转义符 用来取消 特定功能符号的 正则表达式含义
| 或者,选择两者中的一个。注意|将左右两边分为两部分,而不管左右两边有多长多乱
() 从两个直接量中选择一个,分组
eg:gr(a|e)y匹配gray和grey
[\u4e00-\u9fa5] 匹配汉字 深度拷贝: function deepCopy(o1,o2){
for(var key in o1){
if(o1[key] instanceof Array){
o2[key]=[];
deepCopy(o1[key],o2[key]);
}else if(o1[key] instanceof Object){
o2[key]={};
deepCopy(o1[key],o2[key]);
}else{
o2[key]=o1[key];
}
}
} 浅拷贝: function copy(o1,o2){
for(var k in o1){
o2[k]=o1[k];
}
} 遍历dom树:
function loadTree(parent,callback){
for(var i = 0; i<parent.children.length;i++){
var child=parent.children[i];
if(callback){
callback(child);
}
loadTree(child);
}
}
var ul=document.getElementById('list');
loadTree(ul,function(element){
element.onclick=function(){
console.log(this.innerText);
}
}) 如何使用 正则表达式对象? 1. new RegExp( ‘模式(正则表达式)’, ‘i’ )
第一个参数用于设置 模式:要匹配的规则
第二个参数 用于设置 是否 ‘i’ 忽略大小写 ‘g’ 全局匹配 2. var reg = /模式/i是否忽略大小写
正则表达式对象.test(’要匹配的字符串’) -> 匹配方法
如果 要匹配的字符串符合 正则表达式条件 则返回 true 否则 返回 false onchange事件触发条件:
1.文本框中的 文本内容发生变化 2.失去焦点 ------------------exec提取--------------- exec只返回一个匹配的结果 如果没有匹配的结果返回null ---------------match提取-------------
match 也可以用于 根据正则表达式提取内容 可以同时提取多项内容 test
----------------RegExp.$1....$9
使用RegExp.$1 …… $9 属性 访问 分组后的字符串不同部分的内容 --------------split---------------
trim() 方法会从一个字符串的两端删除空白字符。在这个上下文中的空白字符是所有的空白字符 (space, tab, no-break space 等) 以及所有行终止符字符(如 LF,CR)。
str.trim() 贪婪模式 <.+>
非贪婪模式 <.+?>


js高级笔记的更多相关文章

  1. Node.js高级编程读书笔记Outline

    Motivation 世俗一把,看看前端的JavaScript究竟能做什么. 顺便检验一下自己的学习能力. Audience 想看偏后台的Java程序员关于前端JavaScript的认识的职业前端工程 ...

  2. js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定

    js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定 addEventListener()与removeEventListener( ...

  3. 读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图

    读书笔记 - js高级程序设计 - 第十三章 事件   canvas 具备绘图能力的2D上下文 及文本API 很多浏览器对WebGL的3D上下文支持还不够好   有时候即使浏览器支持,操作系统如果缺缺 ...

  4. 《JS高级程序设计》笔记 —— 解析查询字符串

    今天在继续翻阅<JS高级程序设计>的时候,正好翻到location对象这一小节,其中有一部分就是讲的解析查询字符串.看到这个内容立马想到了做去哪儿秋招笔试题的时候有这么一道题. 去哪儿笔试 ...

  5. 《Node.js 高级编程》简介与第二章笔记

    <Node.js 高级编程> 作者简介 Pedro Teixerra 高产,开源项目程序员 Node 社区活跃成员,Node公司的创始人之一. 10岁开始编程,Visual Basic.C ...

  6. React.js入门笔记

    # React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...

  7. [JS学习笔记]Javascript事件阶段:捕获、目标、冒泡

    当你在浏览器上点击一个按钮时,点击的事件不仅仅发生在按钮上,同时点击的还有这个按钮的容器元素,甚至也点击了整个页面. 事件流 事件流描述了从页面接收事件的顺序,但在浏览器发展到第四代时,浏览器开发团队 ...

  8. javascript高级笔记——内含事件,DOM,BOM等

    JavaScript高级笔记 1,DOM的简单学习 1.1,功能:用于控制HTML文档的内容: 1.2,获取页面标签对象:Element *document.getElementById(" ...

  9. js高级之函数高级部分

    基于尚硅谷的尚硅谷JavaScript高级教程提供笔记撰写,加入一些个人理解 github源码 博客下载 原型与原型链 prototype : 显式原型属性,它默认指向一个Object空对象(即称为: ...

随机推荐

  1. express基础项目创建

    https://www.cnblogs.com/zhentaoo/p/6392248.html

  2. 字符模式console usb串口安装centos

    黄色部分是使用console口安装centos需要使用text模式,可以参考前文,同时镜像路径也是需要指定的,来自/dev/sda4 U盘 setparams 'Install CentOS 7' l ...

  3. python实现bt种子 torrent转magnet

    Python实现bt转磁链  参考前人资料主要两种方式 1,利用python的bencode模块 2,安装libtorrent模块 尝试过两种方法特记录 环境:Windows系统  python 3 ...

  4. nova-api nova-compute 启动服务的时候有的没有加配置文件有的加了

    nova/nova/cmd/api.pyfrom nova import config def main(): config.parse_args(sys.argv) logging.setup(CO ...

  5. .NET framework访问Oracle的几种方法

    首先介绍下开发环境:WIn10 64bit+Visual Studio 2015+Oracle10ClientWin32(只是客户端,如果安装整个数据库也是可以的) 目前了解C#中连接Oracle数据 ...

  6. P2146 [NOI2015]软件包管理器

    题目链接:https://www.luogu.org/problemnew/show/P2146 题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安 ...

  7. 较大的互联网公司对Java的要求(转)

    现在各大互联网公司,对Java类的校招要求越来越高,导致很多小伙伴都很迷茫,今天分享一篇谢照东关于Java学习进阶之路,希望能帮助到一些人 佛说五蕴六毒是妄,将因果都念作业障 把看过的书罗列一下 &l ...

  8. Java和C++的数组比较

    Java:数组的定义:如下两种方式都可以:int array[];int[] array; 注意:数组在定义后,不能直接使用.必须在初始化后才能使用.初始化有两种方式:1.静态初始化:int arra ...

  9. The First Day Of Cnblogs

    The fear of the LORD is the beginning of wisdom,and knowledge of the Holy One is understanding. ——Pr ...

  10. python 基础———— 字符串常用的调用 (图)

    Python 常用的 字符串调用方法 这里用到了pycharm ( 使用Python  有力的工具) 下载地址https://www.jetbrains.com/pycharm/download/#s ...