getter与setter
getter与settergetter是一个获取某个属性的值的方法,setter是一个设定某个属性的值的方法。
描述
通过getter与setter可以实现数据取值与赋值的拦截操作,当想监控某个值的变化的时候,通过getter与setter即可实现监听,而不需要找到并修改每一个操作这个值的代码。
有时需要允许访问返回动态计算值的属性,或者需要反映内部变量的状态,而不需要使用显式方法调用,可以使用getter与setter来实现。
尽管可以结合使用getter和setter来创建一个伪属性,但是不能将getter与setter绑定到一个属性并且该属性实际上具有一个值。
字面量声明可以直接通过字 ...
JS原型与原型链
原型与原型链JavaScript有着七种基本类型String、Number、Boolean、Null、Undefined、Symbol、Object,前六种为基本数据类型,Object为引用类型。函数本质上是Object类型,也就是一个对象。
值得注意的是typeof (null)会返回Object,这是因为JS二进制前三位都为0的话会被判断为Object类型,null的二进制表示是全0,自然前三位也是0,所以执行typeof时会返回Object,实际null为基本数据类型。
构造函数对象构造一个Student类,实例化Student出stu实例对象。
1234function Stude ...
Promise
Promise对象JavaScript是单线程的语言,通过维护执行栈与任务队列而实现了异步操作,setTimeout与Ajax就是典型的异步操作,Promise就是异步操作的一个解决方案,用于表示一个异步操作的最终完成或失败及其结果值,Promise有各种开源实现,在ES6中被统一规范,由浏览器直接支持。
语法123new Promise( function(resolve, reject) { /* executor */ // 执行代码 需要指明resolve与reject的回调位置});
executor是带有resolve和reject两个参数的函数。Pro ...
JS中this指向
JS中this的指向this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象。
实例定义函数与对象并调用,注意只有调用函数才会使this指向调用者,但箭头函数除外。
12345678910111213141516171819202122232425262728293031323334353637383940function s(){ console.log(this);}// window中直接调用 // 非 use stricts(); // Window // 等同于window.s() ...
valueOf与toString
valueOf与toStringvalueOf和toString是Object.prototype上的方法,在Js几乎所有的对象都会继承自Object,同样由于包装对象的原因,几乎所有的数据类型都能够调用这两个方法,无法调用的有例如null、undefined以及Object.create(null)创建的对象等,通常我们一般不会主动调用这两个方法,而在代码执行的过程中这两个方法会经常被偷偷的调用,而且在不同的情况下会有选择的进行调用。
valueOfJavaScript通过调用valueOf方法将对象转换为原始值,我们很少需要自己调用valueOf方法,当遇到要预期的原始值的对象时,Java ...
Grid布局
Grid布局目前CSS布局方案中,网格布局可以算得上是最强大的布局方案了。它可以将网页分为一个个网格,然后利用这些网格组合做出各种各样的布局。Grid布局与Flex布局有一定的相似性,都可以指定容器内部多个成员的位置。不同之处在于,Flex布局是轴线布局,只能指定成员针对轴线的位置,可以看作是一维布局。Grid布局则是将容器划分成行和列,产生单元格,然后指定成员所在的单元格,可以看作是二维布局。
基础通过指定display: grid;指定容器使用Grid布局,Grid布局中采用网格布局的区域,称为容器,容器内部采用网格定位的子元素,称为成员。容器中水平区域称为行,垂直区域称为列,可以将其看作 ...
JS作用域和作用域链
作用域与作用域链通常来说,一段程序代码中所用到的名字并不总是有效或可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域scope,当一个方法或成员被声明,他就拥有当前的执行上下文context环境,在有具体值的context中,表达式是可见也都能够被引用,如果一个变量或者其他表达式不在当前的作用域,则将无法使用。作用域也可以根据代码层次分层,以便子作用域可以访问父作用域,通常是指沿着链式的作用域链查找,而不能从父作用域引用子作用域中的变量和引用。
作用域JavaScript作用域为静态作用域static scope,也可以称为词法作用域lexical scope,其主要特征在于,函数作 ...
JS变量提升
JavaScript变量提升在JavaScript中变量声明与函数声明都会被提升到作用域顶部,优先级依次为: 函数声明 变量声明 变量赋值。
变量提升var的变量提升1234console.log(a); // undefinedvar a = 1;console.log(a); // 1// console.log(b); // ReferenceError: b is not defined
为了显示a与b的区别,打印了一下未声明的变量b,其抛出了一个ReferenceError异常,而a并未抛出异常,其实对a的定义并赋值类似于以下的操作,将a的声明提升到作用域最顶端,然后再执行赋值操作 ...
JavaScript闭包
JavaScript闭包函数和对其词法环境lexical environment的引用捆绑在一起构成闭包,也就是说,闭包可以让你从内部函数访问外部函数作用域。在JavaScript,函数在每次创建时生成闭包。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
定义闭包为了定义一个闭包,首先需要一个函数来套一个匿名函数。闭包是需要使用局部变量的,定义使用全局变量就失去了使用闭包的意义,最外层定义的函数可实现局部作用域从而定义局部变量,函数外部无法直接访问内部定义的变量。
12345678910function student(){ var name = "Ming&q ...
Map与WeakMap
Map与WeakMapMap对象用来保存键值对,并且能够记住键的原始插入顺序,任何对象或者原始值都可以作为键或者是值。WeakMap对象同样用来保存键值对,对于键是弱引用的而且必须为一个对象,而值可以是任意的对象或者原始值。
Map描述Map对象类似于一个普通的键值对的Object对象,也是键值对的集合,但是他们之间有一些重要的区别:
描述
Map
Object
意外的键
Map默认情况不包含任何键,只包含显式插入的键。
一个Object有一个原型, 原型链上的键名有可能和在对象上的设置的键名产生冲突。
键的类型
一个Map的键可以是任意值,包括函数、对象或任意基本类型。
一个 ...