JavaScript高级 手写call apply bind

一、实现call 函数call调用方式: 1 2 3 4 5 function foo(name, age) { console.log(this, name, age) } foo.call({ name: "mocha" }, 20) // {name: 'mocha'} 'mocha' 20 手写call: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 function foo(name, age) { console.log(this, name, age) } Function.prototype.moCall = function (thisArg, ...otherArgs) { // this -> 指向当前调用的函数对象 // thisArg -> 传入的第一个参数,是要绑定的this // 确保thisArg是对象类型 thisArg = (thisArg === null……

阅读全文

JavaScript高级 ES6类的使用

一、class类的定义 按照前面的构造函数形式创建类,不仅仅和编写普通的函数过于相识,而且代码并不容易理解 在ES6(ECMAScript2015)新的标准中使用了class关键字来直接定义类 但是类本质上依然是构造函数、原型链的语法糖而已 定义方式 方式一: 字面量 1 2 3 4 5 6 7 class Person { } var……

阅读全文

JavaScript高级 ES5中实现继承

一、对象和函数的原型 认识对象的原型 JavaScript中每个对象都有一个特殊的内置属性[[prototype]],这个特殊对象可以指向另外一个对象。 这个对象的作用: 当通过引用对象的属性key来获取一个value时,它会触发[[Get]]的操作 这个操作会首先检查该对象是否有对应的属……

阅读全文

JavaScript高级 对象增强

一、Object.defineProperty 属性都是直接定义在对象内部,或者直接添加到对象内部的 但是这样就不能对这个属性进行一些限制;比如属性是否可以通过delete删除,是否能在for in遍历的时候被遍历出来 如果想要对一个属性进行比较精准的操作控制,就可以使用属性描述符 通过属……

阅读全文

JavaScript高级 函数增强

一、函数属性和arguments 函数属性 默认函数对象中已经有的属性。 name length 1 2 3 4 function foo(a,b,c) {} console.log(foo.name) // foo console.log(foo.length) // 3 arguments 一个对应于传递给函数的参数的类数组(array-like)对象。 1 2 3 4 5 function foo(){ console.log(arguments) } foo(12,20,34) array-like意味着它不是一个数组类型,而是对象类型。 但是它有数组的一些特性,比如leng……

阅读全文

JavaScript高级 内存管理

一、JavaScript内存管理 不管什么编程语言,在代码的执行过程中都是需要给它分配内存的,不同的是某些编程语言需要自己手动的管理内存,某些编程语言会自动帮助我们管理内存。 不管以什么样的方式来管理内存,内存的管理都会有如下的生命周期: 第一步: 分配申请需要的内存 第二步: 使用分配的内……

阅读全文

JavaScript高级 执行原理

一、深入V8引擎执行原理 V8引擎架构 Parse模块 Parse模块会将JavaScript代码转为AST(抽象语法树),这是因为解析器并不直接认识JavaScript代码。 如果函数没有被调用,那么是不会被转换成AST的 Ignition模块 Ignition是一个解释器,会将AST转换……

阅读全文

JavaScript高级 网页的解析

一、网页的解析过程 解析一 HTML解析过程 因为默认情况下服务器会给浏览器返回index.html文件,所以解析html是所有步骤的开始。 解析html,会构建DOM Tree。 解析二 生成CSS规则 在解析的过程中,遇到css的link元素,会由浏览器负责下载对应的css文件。注意:下载c……

阅读全文

JavaScript高级 函数的this指向

一、this的绑定规则 默认绑定 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 // 1 独立函数被调用-this指向window function foo() { console.log(this) } foo() // 2 函数定义在对象中,但是被独立调用-this指向window var obj = { bar: function () { console.log(this) } } var baz = obj.bar baz() // 3 高阶函数,函数作为实参被调用-this指向wi……

阅读全文

JavaScript基础 BOM操作

一、认识 BOM 浏览器对象模型(Browser Object Model),简称BOM,由浏览器提供的用于处理文档之外的所有内容的其他对象,比如 navigator、 location、 history 等对象。 JavaScript 有一个非常重要的运行环境就是浏览器,而且浏览器本身又作为一个应用程序需要对其本身进行操作;所以通常浏览器会……

阅读全文

© 2023 Gmi_61

本站仅为本人的学习笔记,部分内容来自网络,如果侵权请联系删除,谢谢大家!