JavaScript学习之this指向、js错误处理、继承

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()

在这里插入图片描述

  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值