this指向
this三种含义
(1)构造函数中的this指的是新创建的对象
(2)普通函数中的this指向的是Window对象
(3)将函数作为对象的函数调用时this指向的是该对象
例如:
function foo(){
return this;
}
//这是一个普通函数,这里的this代表的是Window
var o={
name='Jim'
func:foo
}
console.log(foo()===window) //ture
//foo()返回的this是window对象,所以为ture
console.log(o.func()===o) //ture
//func:foo 表示func指向foo这个函数,所以o.func()相当于o.foo(),
//return this后返回o这个对象。
更改this指向
可以通过语句更改this的指向
更改this指向的方法有apply()方法和call方法
(1)apply(obj,argArray)
obj代表对象,arrArray代表数组
(2)call(obj,arg1,arg2,…)
obj代表对象,arg1,arg2…代表参数
例如:
function method(){
console.log(this.name)
}
method.apply({name:'小文'}) // 小文
method.call({name:'文子'}) //更改this指向,文子
apply()方法和call()方法的区别:
(1)apply(obj,argArray)以数组方式传参
(2)call(obj,arg1,arg2,…)以参数方式传参
function method(a,b){
console.log(a+b)
}
method.apply({},['1','2']) //数组方式传参,结果为12(字符串相加)
method.call({},'3','4') //参数方式传参,结果为34
错误处理
错误处理方法
在执行代码时,有时会报错,一个地方的代码出现错误,后面的程序就不再执行,所以要对可能出现的错误进行捕获处理。
错误处理方法:
try{
可能会出现错误的代码
}catch(e){ //代码的错误类型
错误出现后的处理代码
}
练习
try{
var o={}
o.func() //出现错误
}catch(e){
console.log(e) //e中存放错误原因,直接输出错误原因
//console.log("代码出错了") //也可以自定义出现错误后输出的语句
}
错误处理时也可以先抛出错误对象,再将对象接收。
//抛出错误对象
try{
var e1=new Error("错误信息") //创建错误对象e1
throw e1 //抛出错误对象e1
}catch(e){
console.log(e.message) //'e'是用来接收try里面抛出的错误对象,e.message中保存的是错误信息
console.log(e===e1) //ture
}
常见错误类型:
继承
定义
现实中的继承:子承父业
程序中的继承:子类可以继承父类的一些属性和方法
语法
class Father{ //父类
属性
方法
}
class Son extends Father{ //子类继承父类
属性
方法(子类新增加的属性方法)
}
说明:
(1)子类函数名与父类的函数名相同,则子类覆盖父类
(2)继承中,在创建子类对象时,先调用父类的构造函数然后再调用子类的构造函数
(3)在子类构造函数中可以通过super([参数])来调用父类的构造函数,super([参数])必须作为子类构造函数的第一条语句
(4)在子类中可以通过super.函数名()来调用父类的其他函数
练习
class Father{ //父类(基类)
constructor(type,color){
this.type=type
this.color=color
}
money(){
console.log(100)
}
show(){
console.log("类型:"+this.type)
console.log("颜色:"+this.color)
}
}
class Son extends Father{ //Son是子类(又称派生类)
constructor(type,color,weight){
super(type,color) //调用父类的构造函数constructor(type,color)
this.weight=weight //子类特有的属性
}
show(){ //子类覆盖父类函数
super.show() //调用父类其他函数(show()函数)
console.log("重量:"+this.type)
}
other(){
return "子类的其他方法"
}
}
//实例
var s1=new Son()
s1.money()
var s2=new Son('4G','炫酷黑','300g')
s2.show()