JavaScript高级编程
聂14昊51
努力+耐心
展开
-
最详细的JavaScript高级教程(十八)高级原型链
经典继承(借用构造函数)为了解决之前提到的超类型构造函数中引用类型的问题,我们可以使用借用构造函数的方式 function SuperType() { this.property = ['red']; } function SubType() { SuperType.call(this); // 借用构造函数 } var instance = new SubType(); alert(instance instanceof SubType); alert(ins原创 2020-06-05 10:31:39 · 531 阅读 · 0 评论 -
最详细的JavaScript高级教程(十七)原型链
概述首先说明,学习原型链的知识是为了更好的理解原型和原型对象,在实际应用中很少单独使用下面介绍的原型链,具体的原因是下面提到的它的缺点。我们复习一下之前的知识:构造函数的prototype指向了原型对象原型对象中constructor指向了构造函数实例中的__proto__指向了原型对象这时候我们如果将一个实例的原型指针,指向另一个对象的实例,这时候这些实例就会串成一个链条,即A实例的__proto__指向B实例,B实例的__proto__又指向其原型对象。下面的代码是原型链的基本实现:原创 2020-06-05 10:25:31 · 337 阅读 · 0 评论 -
最详细的JavaScript高级教程(十六)创建对象
创建一个对象再给这个对象赋值的操作需要大量的代码,如果要创建多个对象,就要写很多重复代码,对象的创建可以使用下面这些方法来避免写大量的不好维护的重复代码。工厂模式优点:创建一个对象的大量实例缺点:无法进行对象识别,即使用工厂模式创建的对象,还是Object对象,不是一种新的对象,也就不能使用instanceof进行验证。总结就是说:工厂模式虽然创建了Person类的实例,但是却没有创建Person本身,Person的实例也无法标识出来。function createPerson(name, ag原创 2020-06-05 10:07:29 · 299 阅读 · 0 评论 -
最详细的JavaScript高级教程(十五)对象的属性
概念ES对于对象的定义是:无序属性的集合,其属性可以包括基本值,对象或者函数。从中我们可以发现,js中的对象有下面的特征无序的集合,这个就让js中的对象更像是散列表,是一系列无序的键值对的集合属性包括基本值,对象或者函数。这个把属性可以包括哪些数据类型说的很清楚了属性类型ES中有下面两种属性数据属性访问器属性顾名思义,数据属性可以保存一个数据值,而访问器属性本身不能保存数据值,但是可以通过getter setter进行访问控制,它的属性存储还需要额外的数据属性。数据属性中值是如何存原创 2020-06-04 15:30:16 · 300 阅读 · 0 评论 -
最详细的JavaScript高级教程(十四)单体内置对象
定义由语言本身实现,不依赖宿主对象,不用初始化即可使用的对象,我们可以理解在语言所有初始化开始之前就初始化完成的对象。一共由下面五个:ObjectArrayStringGlobalMathGlobal的方法全局对象,可以认为是终极对象,所有不属于其他对象的属性和函数都是全局对象的函数。它有下面这些方法:isNaN()isFinite()parseInt()parseFloat()URI编码方法,用于编码URI中例如空格这种不能包含的字符为编码值// encodeURI 智能对原创 2020-06-04 15:10:16 · 351 阅读 · 0 评论 -
最详细的JavaScript高级教程(十三)包装类型
概念在讲js中包装类型的概念的时候我们想到在C#中,同样有包装类型的概念。基本类型不能有属性和方法,而string,int等都是基本类型,讲道理他们不该有int.parse这种使用,但是我们在别的语言中,经常使用这种语法,为什么呢?这时候我们想到,C#中有String对象,大小写只差,string是基本类型,String是对象,这个对象就是string的包装,js中同样需要这样的包装以实现类似于下面的调用var s1 = 'text';var s2 = s1.substring(2);js中的原创 2020-06-04 15:02:39 · 304 阅读 · 0 评论 -
最详细的JavaScript高级教程(十二)函数
函数也是对象,也是引用类型。定义两种定义方法都是等价的function sum(arg1, arg2){ return arg1 + arg2;}var sum2 = function(arg1, arg2){ return arg1 + arg2;}函数指针需要理解,函数名只是函数的指针,可以新建指针指向一个函数,也可以将原先指向函数的指针清空function sum(arg1, arg2){ return arg1 + arg2;}var sum1 =原创 2020-05-19 10:24:49 · 508 阅读 · 0 评论 -
最详细的JavaScript高级教程(十一)正则表达式
正则表达式概念本节讲正则表达式在js中的使用,注意正则对象是一个引用类型。初始化:字面量和对象使用与对象的定义一样,我们可以使用字面量定义正则表达式,也可以使用正则对象来定义正则表达式,他们的区别是使用的转义有一定差别。在使用字面量的时候,使用/ /把正则表达式包起来,后面可以写上匹配模式或者不写,不写默认不是全局匹配,我们在使用的时候,一般都是使用字面量来初始化,因为这样比较简单,转义也不像字符串那么复杂。// 正则表达式 /at/g 表示匹配所有at /g表示全局搜索var patter原创 2020-05-14 15:54:02 · 8017 阅读 · 12 评论 -
最详细的JavaScript高级教程(十)日期和时间 Date对象
概念js中使用utc时间保存日期和时间,即1970年1月1日零点开始经过的毫秒数保存时间。Date类型是引用类型。定义注意新定义一个时间如果什么都不传,默认值是创建的时候的当前时间var now = new Date();var now = new Date(22334242); // 可以传入毫秒数初始化var now = new Date("1/2/2019");// 可以使用字符串作为参数,此时底层默认调用parsevar now = new Date(2000, 2, 3, 4, 5,原创 2020-05-14 15:10:40 · 317 阅读 · 0 评论 -
最详细的JavaScript高级教程(九)Array
Array类型是js中常用的引用类型。js中的Array最大的特点就是:数组可以容纳多种类型的元素,数组在定义的时候不用指明元素类型,一个数组中可以混杂多种数据类型。创建数组// 使用Array对象初始化// 需要预先知道元素数量var colors = new Array(10);// 传入数字,则使用数字个数初始化数组// 传入其他数据类型,则创建只有一个元素的数组var colors = new Array('red');// 使用多个元素初始化Arrayvar colors = n原创 2020-05-14 15:01:04 · 623 阅读 · 0 评论 -
最详细的JavaScript高级教程(八)值类型和引用类型
值类型和引用类型在js中,除了Object,其他五种基本类型都是值类型,包括String也是值类型。注意:允许给引用类型动态的添加属性值,不允许给值类型添加属性值。// 基本类型,不能添加属性,会报错var test = "sss";test.name = "W";alert(test.name);// 引用类型,可以动态添加属性,输出正常var test = new Object(); test.name = "W";alert(test.name);值类型是复制值,引用类原创 2020-05-11 10:57:38 · 237 阅读 · 0 评论 -
最详细的JavaScript高级教程(七)表达式
if语句推荐if语句中的表达式不管是不是单行都用大括号括起来以简化阅读。循环语句JS中支持 do while语句 和 while语句,这两种的用法与其他语言相似,这里就不多赘述了,我们看一看for的一些特殊的例子,一看便明白// 不存在块级作用域,所以外部也能访问for(var i = 0; i < 10; i++){ }alert(i) // 输出10// 无限循环for(;;){}// for当成while用var i = 0;for(;i < 10;){原创 2020-05-11 10:49:25 · 334 阅读 · 0 评论 -
最详细的JavaScript高级教程(六)操作符
写在前面我曾经辅导过很多人编程,其中有学霸也有学渣,而编程这个事情,学霸经常会陷入一个 误区:所有的语法都要记住,所有的特性都要了如指掌才算精通。而我们所面对的笔试甚至一些面试也加深了这种印象,事实真的如此么?对于枯燥的语法知识,我们要知其然,知其所以然,但是不需要死记硬背,我们的大脑善于记住感性的东西,所谓:一朝被蛇咬就是如此,我们讲的一些不常用的特性,大家只需要在大脑中形成这里有坑的印象,用的时候回来再看就是了,记住:书是用来查的,教程也是。自增自减自增自减的逻辑与c一致,这里不过多叙述,我们只原创 2020-05-11 10:39:08 · 358 阅读 · 0 评论 -
最详细的JavaScript高级教程(五)数据类型
ES5只有五种基本数据类型和一种复杂数据类型。五种基本数据类型是:UndefinedNullBooleanNumberString一种复杂类型是:Object Object本质上就是一个哈希表,有键值对构成所有的值最终都是上述六种类型。使用typeof就可以获取值的数据类型,获取的类型和基本类型稍微有点不同Undefined 值未定义Boolean 布尔值Number 数值String 字符串Object 对象或者nullfunction 函数需要注意的是type原创 2020-05-11 09:23:38 · 437 阅读 · 0 评论 -
最详细的JavaScript高级教程(四)语法和变量
特点js大量借鉴了C,java,Perl的语法,十分的宽松js是区分大小写的变量,函数名首字符必须是字母,下划线或者$推荐使用驼峰命名注释使用c格式的注释// 这是一个注释/** 这是一个多行注释* 除了开头结尾,每行前面的*不是必须的,但是推荐这么做*/严格模式ES3的一些特性会导致代码运行有一些不确定性,一些特性也会让写出来的代码不太安全,在ES5里面为了避免这种不确定性,推出了严格模式。严格模式下,js运行结果也会不同,要开启严格模式使用下面的代码// 在一原创 2020-05-10 21:04:02 · 649 阅读 · 2 评论 -
最详细的JavaScript高级教程(三)script标签
引子稍微学习过一点网页编写的同学都知道,网页中的js代码应该写在 script 标签中,但是为什么要这么做呢?本文就介绍一下script标签。script 标签最初,网景公司想要在浏览器中展示使用js的html文件,但是又不想影响这个文件在其他浏览器中的显示效果,于是创造了 script 标签我们都知道标签可以在里面添加属性,script标签有下面的属性:async 表示立即下载该脚本,不应该妨碍界面中其他操作src 表示要执行这个脚本的外部文件,可选charset src指定的外部文件的字原创 2020-05-10 20:11:12 · 778 阅读 · 0 评论 -
最详细的JavaScript高级教程(二)JavaScript和ECMAScript
JS和ES每一个学习JS的同学都听说过ES5,ES6,但是,是否所有的同学都清除的知道他们之间的关系呢?我们通常认为这两个是一个东西,事实上他们的关系如下:从上面的图中我们清除的看到,他们不是并列关系,而是包含关系,那么下面就分别介绍一下ECMAScript核心,它本身并没有输入和输出的定义,这门语言和浏览器也没有依赖关系。浏览器只是提供了语言的宿主环境,同时提供了这门语言的实现以及一些本地化的扩展。既然浏览器是宿主环境,那就还存在别的宿主环境:比如Node,比如Adobe FlashECMA原创 2020-05-10 20:04:21 · 678 阅读 · 0 评论 -
最详细的JavaScript高级教程(一)简介
目标要想全面的理解和掌握JS,关键在于弄清楚它的本质,历史,和局限性。适用人群会使用JS编程但是学习不系统的同学有其他编程语言实践经验,想要了解JS的同学想要为nodejs等打坚实基础的同学版本号通常我们说浏览器使用的js的版本号,是通过他们对于ECMAScript版本的兼容性来表达的,比如兼容ES6。关于ES6虽然《JavaScript高级程序设计》是一本讲ES5的书,但是本教程会将ES6相关的知识都穿插入教程中。参考本教程参考了《JavaScript高级程序设计(第三版)》原创 2020-05-10 19:57:23 · 2200 阅读 · 1 评论