nodeJS继承中的子类constructor的写法+静态属性和静态方法+nodejs中的全局对象

29 篇文章 3 订阅
13 篇文章 1 订阅

1、继承中的子类constructor的写法:

在ES6中使用继承时,constructor中必须调用super()方法,其本质是在调用父类的constructor方法。通过这样的方式来达到属性继承的效果,

解析:当子函数中也出现了与父类相同的属性或者方法会出现重写/覆盖的效果,此时若重写的是constructor方法就会导致参数无法传入提示需要调用的报错,为解决此问题,我们需要在子类中调用super()方法,将参数传到父类中,去累加父类和子类函数体中的执行语句。

class Animal{
​
    // 定义构造函数
    constructor(name){
        console.log("constructor");
        this.name = name;
        this.age = 0;
        this.color = "white";
    }
​
    // 定义一个方法
    showName(){
        console.log(this.name);
    }
​
    //定义静态方法
    static eat(){
        console.log("吃---");
    }
}
​
class Cat extends Animal{
    //注意:在ES6中使用继承时,constructor中必须调用super()方法,其本质是在调用父类的constructor方法。通过这样的方式来达到属性继承的效果
    constructor(name){
        super(name);
        // console.log("constructor");
        this.color = "yellow";
    }
    
    
    //定义Cat类特有的方法
    catchMouse(){
        console.log("抓老鼠");
    }
    //重写父类方法
    showName(){
        console.log(this.name, "喵喵");
    }
}
​
let cat1 = new Cat("Tom");
console.log(cat1.color);
console.log(cat1.age);
console.log(cat1.name);
cat1.catchMouse();
cat1.showName();

2、静态属性和静态方法

Math.max(10, 20 30, 16) 把构造函数当成普通对象来调用某个方法,这个方法叫静态方法,如果是属性,我们就称它为静态属性。

定义静态方法,再类中通过加static关键字来定义。

关于静态属性,目前暂时没有关键字来定义,想要实现的话就在定义完类之后直接在类上添加属性,获取的时候通过类名来获取这个属性。

class Animal{
​
    // 定义构造函数
    constructor(name){
        // console.log("constructor");
        this.name = name
    }
​
    // 定义一个方法
    showName(){
        console.log(this.name);
    }
​
    //定义静态方法,再类中通过加static关键字来定义
    static eat(){
        console.log("吃---");
    }
}
​
let obj = new Animal("Tom");
​
obj.showName();
Animal.eat();
// 关于静态属性,目前暂时没有关键字来定义,想要实现的话就在定义完类之后直接在类上添加属性,获取的时候通过类名来获取这个属性
Animal.type = "动物";
console.log(Animal.type);

3、nodejs中的全局对象

JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。

在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global 对象的属性。

后面看到所有的全局变量,例如 console,setTimeout 和 process 是 global 变量的成员。我们甚至可以向全局变量添加成员,使其在任何地方都可用。

给global对象添加成员:global.a = 10;

// 1. nodejs 里面没有 window全局对象,但是存在一个 gloabal 全局对象。之前使用 console. setTimeout 这些全局的函数都是 global 上面的属性
​
// console.log(window);   // 报错 ReferenceError: window is not defined
// console.log(global);
​
​
// 2. nodejs 里面声明的变量,并不会被挂载带 global 全局对象
let b = 20;
console.log(global.b);  //undefined
​
​
// 3. 可以向global添加成员,使其在任何地方都可用
global.a = 10;
console.log(a); //10
​
// 4. 在nodejs执行js文件的过程中,里面也存在 this ,但是这个 this 和 global 并不是相等。
console.log(global === this);  //false
// 实际上,在 nodejs 里面的this代表的当前这个 js模块(暂且认为 this 代表当前这个js文件)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值