JavaScript面向对象
gaearon
立志要做计算机大牛
展开
-
let that = this 重要性
阅读其他人代码的时候,可能会遇到这样一段代码let that = this不要小看这段话,作用大了去了。原因是:this 会随着上下文环境而变换它的指向,在当前作用域中设置一个变量用来存储 this 可以防止在其他地方找不到 this 的错误。...原创 2021-03-14 20:54:55 · 1098 阅读 · 1 评论 -
JS面向对象之this详解(持续更新)
前言this 是 JavaScript 中较为复杂的机制之一,this 被隐式定义在所有函数的作用域中,也就是说函数在调用时自动传入一个 this。有经验的 JavaScript 开发者或许也很难说懂 this 到底指向哪里。由于博主还是一个学生,无开发经验,所以本文只是博主自己的理解,参考了《你不知道的JavaScript》一书,有不足之处恳请大佬不吝赐教。通过一段代码来了解 this 的逼格有多高:function getName() { return this.name;}fun原创 2020-11-01 00:15:45 · 273 阅读 · 0 评论 -
JS严格模式
禁止意外创建变量在严格模式下,不允许不使用 var 直接声明变量,若只在函数作用域中声明则只有函数作用域才开启严格模式。如下代码在没有使用var就创建了变量:'use strict';str = 'hello world';console.log(str);结果:ReferenceError: str is not defined为常量更改值在老版本中 JS 中的常量的值被更改时,不会报错。但是值也不会改变。若开启了严格模式,则会抛出一个异常。如下代码:"use strict"原创 2020-11-01 00:14:13 · 393 阅读 · 0 评论 -
JS面向对象之继承
原型链在 JS 中原型链就是实现继承的方式,由于 JS 中没有类的概念,所以实现的是构造函数之间的继承关系。所谓继承就是在子级对象中可以访问父级中的属性和方法。如下代码实现了继承的关系:function Animal(){ this.eatFood = function (){ console.log('干饭了,干饭了') }}var monkey = new Animal();function Person(name){ this.name = nam原创 2020-10-30 10:15:00 · 152 阅读 · 0 评论 -
JS面向对象之this绑定规则
默认绑定所谓默认绑定规则就是 js 中的 this 在默认情况下指向了全局对象,也就是无任何前缀就调用带有 this 的函数。如下代码所示:var arg = 10;function fn1() { console.log(this.arg)}fn1();结果:undefined隐式绑定隐式绑定就是函数在调用时,前面存在调用它的一个对象,那么this就会默认的绑定到这个对象上,如下例子:function fn1() { console.log(this.str);原创 2020-10-29 00:15:52 · 199 阅读 · 0 评论 -
JS面向对象之异常处理
异常是什么这里的异常并不是指语法错误,而是指逻辑上的错误,也就是说通过IDE指出的错误并不能称之为异常。这种异常不是我们能干涉的。异常处理的重要性是毋庸置疑的,任何一门编程语言都有异常处理机制。任何一个Web 应用都要有一套完整的异常处理方案。比较常见的处理方式有 try…catch 捕获、throw 抛出,在开发中经常将这两种方式结合起来使用。try…catch 捕获异常语法结构:try{ code} catch(error){ code}其中 try 语句块中为可能出现异原创 2020-10-29 00:14:42 · 259 阅读 · 0 评论 -
JS面向对象之原型
原型是什么JS 中函数是一个包含属性和方法的 Function 类型的对象,原型就是 Function 类型对象的一个属性。prototype 是构造函数特有的一个属性,在这个属性上面的属性和方法可以被通过构造函数创建出来的对象调用,所以也就是可以用来实现继承,这样就方便每一个对象都可以继承这些公用的方法获取原型当获取到了原型之后,我们会得到一个对象,既然是对象我们就可以为其添加属性和方法,而我们为原型设置的属性和方法可以被原型派生的对象调用。有两种方式可以获取对象的原型:构造函数的 p原创 2020-10-28 00:22:26 · 481 阅读 · 0 评论 -
JS面向对象之闭包
作用域链作用域链就是父级作用域中的变量可以在子级作用域、孙子级作用域…中使用的情况。如下代码:function f1(){ var a = 'f1作用域' function f2(){ var b = 'f2作用域' function f3(){ var c = 'f3作用域' console.log(a) console.log(b) console.log(原创 2020-10-26 23:27:33 · 258 阅读 · 0 评论 -
JS面向对象之特殊函数
函数重载JS 中没有函数不能重载,下一个同名函数总是覆盖上一个同名函数。为了模拟函数的重载只能采用 arguments 对象。arguments 对象实际上是一个类数组对象,其中存储着该函数传入的所有实参,arguments 中存储数据的格式为:{ '0': 1, '1': 2, '2': 3, '3': 4 } 其实也是以一个的属性,但是由于属性名的特殊,我们无法使用 . 符号调用,只能采用 [] 的形式,所以获取值的方式看起来很像一个数组。arguments 中有 length 属性用来获取原创 2020-10-26 23:26:54 · 223 阅读 · 0 评论 -
JS面向对象之存取器
设置存取描述符对象的属性除了直接定义,还可以通过存取器进行定义。也就是存取描述符中的 get、set。我们称之为访问器的方式。借助访问器,可以为属性的 value 设计高级功能,如禁用部分特性、设计访问条件、利用内部变量或属性进行数据处理等。get:获取属性值,无参数,可以使用 this。set:为属性赋值,一个参数,可以使用 this。如下代码:function Person(name,age){ this.name = name; this.age = age;}va原创 2020-10-25 20:03:10 · 1080 阅读 · 0 评论 -
JS面向对象之属性描述符
属性描述符JS 提供了一个内部数据结构,用来描述对象的值、控制其行为。称为属性描述符。对象里存在的属性描述符有两种形式,数据描述符和存取描述符。数据描述符数据描述符是一个具有值的属性,数据描述符的键值如下:value:该顺序对应的值,可以为任意有效的值(例如数值、对象、函数),默认为 undefined。writable:值为 true/false,当为 true 时代表value能被改变。configurable:值为 true/false,当为 true 时代表属性描述符才能被改变,该属原创 2020-10-25 19:05:21 · 340 阅读 · 0 评论