学习前端第三十七天(静态属性静态方法、类检查、错误处理)

一、静态属性和静态方法

1、静态属性静态方法

在属性和方法前加上static,创建属于类自己的属性和方法

       class Person {
            // 加static,属于类自己的
            static name = "xc";   // 类的name属性
            static height = 183;  // 类的height属性
            static age = 20;      // 类的age属性
            static sayName() {    // 类的sayName方法
                console.log(this.name)
            }
            static sayHeight() {  // 类的sayHeight方法
                console.log(this.height)
            }

            // 不加static,属于类创建的对象的
            name = "jack";     // 调用类创建的对象里面的属性
            height = 165;     // 调用类创建的对象里面的属性
            sayName() {        // 调用类创建的对象里面的方法
                console.log(this.name)
            }
            sayHeight() {        // 调用类创建的对象里面的方法
                console.log(this.height)
            }
        }

        Person.sayName();    // xc
        Person.sayHeight();    // 183
        new Person().sayName(); // jack
        new Person().sayHeight(); // 165

2、继承静态属性静态方法

本质为原型继承,将Admin的原型设置为Person

使用方法:class Admin extends Person { };  类Admin现在可以调用Person里面的方法了

        class Person {
            static uname = "xc";
            static age = 20;
            static sayName() {
                console.log(this.uname)
            }
            username = "jack";
            sayName() {
                console.log(this.username)
            }
        }
        class Admin extends Person { };
        console.log(Admin.age);   // 20
        Admin.sayName();  //  xc

 

二、类检查

三种检测数据类型的方法

第一种:typeof

以字符串的形式返回数据类型

优点:简单快捷

缺点:只能检测除null外的基本数据类型和function

第二种:instanceof

判断某个对象是否属于一种引用数据类型,返回布尔类型

例: console.log([1, 2, 3] instanceof Array); // true

优点:可以判断出复杂的引用数据类型

缺点:不能检测基本数据类型

第三种:Object.prototype.toString.call()

 console.log(Object.prototype.toString.call(100)) ; // [ object Number ]

优点:能检测出所有数据类型

缺点:IE6下,undefined和null均为Object

三、错误处理

1、try....catch....

try { // 代码... }

catch (err) { // 错误捕获 }

如果 try 中的代码块出错,停止执行try中的代码,仍然继续执行 catch 中的及后面的代码块

仅对运行时的 error 有效,语法错误无效

        try {
            console.log(ad);
            say();
            console.log("....");
        } catch (error) {  // 错误信息被存在了变量“error”中
            console.dir(error);
            console.log(error.name);
            console.log(error.message);
            console.log(error.stack);
        }

name

Error 名称。例如,对于一个未定义的变量,名称是 "ReferenceError"

message

关于 error 的详细文字描述。

还有其他非标准的属性在大多数环境中可用。其中被最广泛使用和支持的是:

stack 

当前的调用栈:用于调试目的的一个字符串,其中包含有关导致 error 的嵌套调用序列的信息。

throw  : 

 // Throw 任意位置中断当前代码执行,抛出错误信息

        console.log(1)

        console.log(2)

        // throw 后面必须是new Error()构建的对象,里面有 name:"";  message:"";  stack:"":

        throw new Error("message hello");

        console.log(3)

        console.log(4)

 

try。。。catch。。和throw结合,自定义什么时候报错,且报错信息是什么

        let age;
        try {   // 使用try缩小报错影响范围
            age = prompt("age?")
            if (+age > 0 && age < 130) {
                console.log(age + "岁");
            } else {
                throw new Error("error age");
            }
            console.log("Right age");  // age是否正确决定这行是否执行
        } catch (error) {
            console.log(error)
        }

try后面有个finally代码,一定会执行

        // try...catch(error)...finally...
        try {
            throw new Error();
        } catch (error) {
            console.log(error); // try中报错时执行
        } finally {
            console.log("finally"); // 一定会执行,不管是否报错
        }

 

全局catch

定义在开头,程序有错误时调用,停止执行当前程序

        window.onerror = function (message, url, line, col, error) {
            console.log("hello");
            console.dir(error)
        };
        throw new Error("error");
        console.log("1");
        console.log("1");

 

2、自定义Error,扩展Error

使用类继承和,自定义什么时候报错,且报错信息是什么,我们可以语义化错误,设置不同的情景错误

        // 自定义Error,设置不同的情景错误,都继承于Error
        class ageError extends Error {
            name = "ageError";
        };
        class phoneError extends Error {
            name = "phoneError";
        };
        class emailError extends Error {
            name = "emailError";
        };

        try {
            // throw new ageError("年龄错误");
            // throw new phoneError("手机号码错误");
            throw new emailError("邮箱号码错误")
        } catch (error) {
            console.log(error.name);
            console.log(error.message);
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值