随笔分类 - javascript
摘要:instanceof主要用于判断某个实例是否属于某个类型,也可用于判断某个实例是否是其父类型或者祖先类型的实例。 instanceof 主要的实现原理就是只要右边变量的 prototype 在左边变量的原型链上即可。因此,instanceof 在查找的过程中会遍历左边变量的原型链,直到找到右边变量的
阅读全文
摘要:关键字new在调用构造函数的时候实际上进行了如下的几个步骤: 1. 创建一个新的对象 2. 将构造函数的作用域赋值给这个新的对象(因此this指向了这个新的对象) 3. 执行构造函数中的代码(为这个新对象添加属性) 4. 返回新对象 我们写一个函数,命名为objectFactory,来模拟new的效
阅读全文
摘要:call, apply, bind都是改变函数执行的上下文,说的直白点就是改变了函数this的指向。不同的是:call和apply改变了函数的this,并且执行了该函数,而bind是改变了函数的this,并返回一个函数,但不执行该函数。 看下面的 例子1: 由此可见,在stu上添加一个属性doThu
阅读全文
摘要:对象方法中的super 原型对于javascript来说非常重要,甚至可以说是javascript中最为重要的知识点。然而,很多人一看到原型就懵逼。ES5我们可以使用Object.getPrototypeOf()来返回原型对象,使用Object.setPrototypeOf()来设置原型对象。 看下
阅读全文
摘要:ES5中创建一个对象(或者叫做类),通常使用构造函数定义实例属性,原型模式用于定义方法和共享属性。对象实例可以访问原型中的值,但不能修改原型中的值。 function Person(name, age) { this.name = name; this.age = age; this.friends
阅读全文
摘要:先回顾一下上一讲的原型。 // 原型 function Person(name) { this.name = name; } Person.prototype.sayName = function() { alert(this.name) } var p1 = new Person('嘿嘿'); c
阅读全文
摘要:创建对象 通常,我们可以通过Object构造函数或对象字面量创建单个对象,但是当我们使用同一个接口创建安很多对象时,就会产生大量代码。所以,我们可以使用下面几种方式创建对象。 1. 工厂模式 function createPerson(name, age, job) { var o = new Ob
阅读全文
摘要:模块功能主要由两个命令构成:export和import。export命令用于暴露模块的对外接口,import命令用于引入其他模块提供的接口。 export命令 一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。要想外部能够读取该模块内的变量,必须使用export关键字输出该变量。如下代
阅读全文
摘要:Class的基本语法 ES5中,生成实例对象的传统方式是通过构造函数。 function Point(x, y) { this.x = x; this.y = y; } Point.prototype.toString = function () { return '(' + this.x + ',
阅读全文
摘要:iterator-generator 遍历Array可以采用下标循环,遍历Map和Set就无法使用下标。为了统一集合类型,ES6标准引入了新的iterable类型,Array、Map和Set都属于iteratore类型。 所有的iterator对象都有next()方法,会返回一个结果对象。该结果对象
阅读全文
摘要:Set Set可以看作是一组key的集合,但不存储value.由于key是不重复的,所以在Set中,没有重复的key。 Set本身就是一个构造函数,所以可使用new来创建Set数据。要创建一个Set,需要提供一个Array作为输入,或直接创建一个空Set. var s = new Set(); va
阅读全文
摘要:何为Symbol ES5中对象的属性名都是字符串,容易造成属性名的冲突。也就是说,当我们在调用别人的对象的同时,又想为这个对象添加一个新的方法,这个新的方法名字就容易与原对象中已有的方法名冲突。ES6引入Symbol,就是为了解决这样的问题。 Symbol是ES6新添加的一个基本数据类型。所以在ES
阅读全文
摘要:解构赋值的作用 解构赋值允许你使用类似数组或对象字面量的语法将数组和对象的属性赋给各种变量。 对象的解构 在赋值语句的左侧使用了对象字面量,即key let node = { type: "Identifier", name: "foo" }; let { type, name } = node;
阅读全文
摘要:背景 javascript是基于单线程事件循环的概念构建的,同一时刻只允许一个代码块执行。 js引擎同一时刻只能执一个代码块,所以需要跟踪即将运行的代码。代码被放到一个任务队列中,每当一段代码准备执行时,都会被添加到任务队列中。当一段代码结束执行,事件循环会执行队列中的下一个任务。 然而,浏览器的网
阅读全文

浙公网安备 33010602011771号