Class类和构造函数

一、创建一个类

constructor函数在创建实例化对象的时候,就进行调用

class Car {
    // 构造器方法
    constructor(name, price) {
        // 构造器中的this--类的实例对象
        this.name = name
        this.price = price
    }
    // 一般方法
    // 这个方法放在了类的原型对象上,供实例使用
    // 通过Car的实例调用该方法时,this指向的就是Car的实例对象
    drive() {
        console.log(`我开${this.name}牌汽车`)
    }
}
// 创建Car的实例对象
const c1 = new Car('奔驰', '50w')
const c2 = new Car('宝马', '40w')
  • 通过赋值语句创建的方法,是放在实例自身上的,调用通过 实例对象名.方法名

  • 直接声明的方法,是放在原型对象上的,调用通过 实例对象名.方法名

  • 如果方法前面用static进行修饰,这个方法时放在类的本身上的,调用通过 类名.方法名
class Car {
    drive() {
        console.log('这个方法放在了原型对象上')
    }
    fun = ()=> {
        console.log('这个方法放在了实例自身上')
    }
    static fun1 = ()=> {
        console.log('我前面用static进行修饰, 我是加在类本身的方法上的方法')
    }
    static fun2() {
        console.log('我前面用static进行修饰, 我是加在类本身的方法上的方法')
    }
}
const c1 = new Car()
c1.drive()
c1.fun()
Car.fun1()
Car.fun2()

二、继承

1.全部继承自父类
class Bus extends Car {}
​
const b1 = new Bus('解放', '10W')
​
console.log(b1)
// Bus { name: '解放', price: '10W' }
b1.drive()
// 我开解放牌汽车
2. super关键字
// 继续上面的例子
class Bus extends Car {
  constructor(name, price, load) {
    super(name, price)
    this.load = load
  }
}
​
const b1 = new Bus('解放', '10W', '20t')
​
console.log(b1)
// Bus { name: '解放', price: '10W', load: '20t' }

super关键字只能放在构造器函数最前面执行

2.1 类中的继承关系
// 继续上面的例子
b1.drive()
// 我开解放牌汽车

此时,b1的原型对象Bus上并没有drive方法,因此通过原型链向上找到Car原型对象,Car的原型上有drive,因此,此时b1是通过原型链调用的Car上的方法

class Bus extends Car {
  constructor(name, price, load) {
    super(name, price)
    this.load = load
  }
  drive() {
    console.log(`我开${this.name}牌汽车,我的载重是${this.load}`)
  }
}
​
const b1 = new Bus('解放', '10W', '20t')
​
b1.drive() 
// 我开解放牌汽车,我的载重是20t

此时,b1的原型对象Bus上有drive方法,因此,b1调用的就是他原型对象上的drive方法

2.2 super调用父类中的普通函数
class Car {
  constructor(name, price) {
    this.name = name
    this.price = price
  }
  drive() {
    return `我是${this.name}牌汽车,我的价格是${this.price}`
  }
}
​
class Bus extends Car {
  constructor(name, price, weight) {
    super(name, price)
    this.weight = weight
  }
  drive() {
    console.log(super.drive() + ',我的载重是' + this.weight)
  }
}
​
const b1 = new Bus('解放', '10w', '10t')
​
b1.drive()

在子类的普通函数中,可以通过super.父类函数名(),来调用父类中的普通函数

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++中,中的函数指针是可以用来指向成员函数的指针。需要注意的是,成员函数指针与普通函数指针有一些不同之处。 首先,成员函数指针的型与成员函数的型相关联。假设我们有一个`MyClass`和一个成员函数`void func(int)`,那么对应的成员函数指针型就是`void (MyClass::*)(int)`。其中,`MyClass`是名,`*`表示指针,`void`是返回型,`(int)`是参数列表。 下面是一个简单的示例,演示了如何定义和使用成员函数指针: ```cpp #include <iostream> class MyClass { public: void func(int num) { std::cout << "Hello from func: " << num << std::endl; } }; int main() { MyClass obj; void (MyClass::*funcPtr)(int) = &MyClass::func; // 定义成员函数指针 // 通过指针调用成员函数 (obj.*funcPtr)(42); return 0; } ``` 在上面的示例中,我们首先定义了一个`MyClass`和一个成员函数`func`。然后,在主函数中,我们创建了一个`MyClass`的对象`obj`,并定义了一个成员函数指针`funcPtr`,将其初始化为指向`func`函数。最后,我们通过指针调用了成员函数,并输出了结果。 需要注意的是,成员函数指针在调用时需要使用对象指针或引用来访问成员函数。在示例中,我们使用`(obj.*funcPtr)(42)`来调用`func`函数,其中`obj`是对象,`.*`是成员访问操作符,`funcPtr`是成员函数指针。 希望以上信息对你有帮助!如果你有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值