继承
- 继承是指一个对象直接使用另一对象的属性和方法。
- 继承的方式一
//继承 父类的对象 赋值给 子类的原型 实现继承
Son.prototype = new Father();
- 继承方式二
对象冒充: call,apply方式
作用域
作用域
ECMAScript 6 之前的JavaScript没有 语句块 作用域;相反,语句块中声明的变量将成为语句块所在代码段的局部变量。例如,如下的代码将在控制台输出 5,因为 x 的作用域是声明了 x 的那个函数(或全局范围),而不是 if 语句块。全局变量,局部变量
在所有函数之外声明的变量,叫做全局变量,因为它可被当前文档中的任何其他代码所访问。在函数内部声明的变量,叫做局部变量,因为它只能在该函数内部访问。作用域链
当前代码在环境中执行时,会形成一个作用域链,用来保证执行环境中 访问权限,在作用链中:首先会在当前的作用中寻找,如果找到就使用,若没有找到,到对应的上层去找,以此类推
声明提升
变量(函数)提升:程序运行之前, 会检测所有的代码,如果遇到关键词 var(function) ,表明对应变量是存在,在内存分配一定的区域
console.log(num); //错误,没有变量提升
//变量
console.log(c);
var c;
c = 10;
console.log(c);
闭包
- 闭包的概念 :
闭包是指这样的作用域,它包含有一个函数,这个函数可以调用被这个作用域所封闭的变量、函数或者闭包等内容。通常我们通过闭包所对应的函数来获得对闭包的访问。//闭包函数可以把局部变量驻留在内存中 function fun5() { var a = 100; return function() { return ++a; } } var result = fun5(); console.log(result()); //101 console.log(result()); //102 console.log(result()); //103
- 闭包可以防止大量的全局污染,但是如果不是因为某些特殊任务而需要闭包,在没有必要的情况下,在其它函数中创建函数是不明智的,因为闭包对脚本性能具有负面影响,包括处理速度和内存消耗。
ES6语法中的类与继承
- class 关键字 : 定义类
- constructor 关键字 : 构造函数
- static 关键字用来定义一个类的一个静态方法
- extends 关键字 : 实现继承
- super 调用超类
//–––––––––––––––使用 extends继承––––––––––––
class Son extends Father {
speak() {
super.speak();
alert(this.name + '儿子说');
}
}
let s = new Son('xiaoming',22);
s.speak();