作用域和作用域链
作用域:全局作用域;函数作用域
全局作用域:window保存全局变量
函数作用域:保存局部变量(形参和函数内var声明)
全局作用域可重用,但极易容易被污染;
局部作用域不可重用,仅保存在函数内部使用,不会被污染
函数作用域对象原理:
1)函数作用域对象仅在函数被调用时临时创建,用来保存函数内的局部变量
2)当函数调用完毕后,函数作用域对象和局部变量开始释放
作用域链(scope chain/scopes): 保存一个函数可用的所有作用域对象的链式结果(好友列表)学名就叫作用域链。作用域链保存着一个函数可用的所有变量,作用域链控制着变量的使用顺序——先局部后全局。
原型对象:为所有子对象保存共有成员‘
类:由构造函数constructor和某个类的原型对象组成
原型链::保存着一个对象可用的所有属性和方法,控制着属性和方法的使用顺序:先自有后共有,就近一致。
构造函数的子对象直接使用原型对象的属性和方法就叫做继承。
所有内置对象的原型对象中,已经重写了适合其子对象的方法(例如:toString方法)
重写:在子对象中定义一个和父对象中成员(方法/属性)相同的成员。
举例:为自定义类型重写(override) toString()
方法
//先写一个构造函数
function Student(sname,sage){
this.sname = sname;
this.sage = sage;
}
//开始override
Student.prototype.toString=function(){
return `{
学生姓名:${this.sname},
学生年龄:${this.sage}
}
`
//override结束
//调用前要创建构造函数student的子对象
var hmm = new Student("Hanmeimei",16);
//调用新写的toString()方法
console.log(hmm.toString());
//结果:
{
学生姓名:Hanmeimei,
学生年龄:16
}
}