Class和普通构造函数的区别

JS构造函数

//JS构造函数
function MathHandle(x,y){
    this.x = x;
    this.y = y;
}
MathHandle.prototype.add = function(){
    return this.x + this.y;
}
let test = new MathHandle(1,2);
console.log(test.add());
console.log(typeof MathHandle);
console.log(MathHandle.prototype.constructor === MathHandle);
console.log(test.__proto__ === MathHandle.prototype);
// 3
// function
// true
// true

Class基本语法

//Class语法
class MathHandle {
	//构造器
    constructor(x, y) {
        this.x = x;
        this.y = y;
    }
    add() {
        return this.x + this.y;
    }
}

let test2 = new MathHandle(3, 7);
console.log(test2.add());
console.log(typeof MathHandle);
console.log(MathHandle.prototype.constructor === MathHandle);
console.log(test2.__proto__ === MathHandle.prototype);

class本身只是语法糖,

继承

// //动物
// function Animal(){
//     this.eat = function(){
//         console.log('Animal eat');
//     }
// }

// //狗
// function Dog(){
//     this.bark = function(){
//         console.log('Dog bark');
//     }
// }

// //绑定原型,实现继承
// Dog.prototype = new Animal();

// let erha = new Dog();
// erha.bark();
// erha.eat();

class Animal {
    constructor(name) {
        this.name = name;
    }
    eat() {
        console.log(this.name + ' eat');
    }
}

class Dog extends Animal {
    constructor(name) {
        super(name);
    }
    bark() {
        console.log(this.name + ' bark');
    }
}

let dog = new Dog('erha');
dog.bark();
dog.eat();

总结:
Class在语法上更加贴合面向对象的写法,Class实现继承更加易读,更易于后端开发人员的学习,但是本质上还是语法糖,使用的还是prototype原型的继承方式。

### 构造函数普通成员函数在面向对象编程中的区别 构造函数普通成员函数是面向对象编程中两个重要的概念,它们在功能、调用方式以及使用场景上有显著的区别构造函数是一种特殊的方法,主要用于在创建对象时初始化对象的状态。它的命名必须类名完全相同,并且没有返回值类型,包括不能使用`void`来修饰[^1]。当定义一个类的时候,即使没有显式地提供构造函数,编译器也会提供一个默认的构造函数[^5]。构造函数的主要作用是在对象实例化时设置初始状态,这通常涉及到为类的成员变量分配初始值。例如,在C++中,可以定义一个简单的类`Geeks`并为其提供一个默认构造函数: ```cpp #include <iostream> using std::cout; class Geeks { public: int id; Geeks() { // 默认构造函数,不带参数 id = 0; // 给类成员设置初始化值 } }; ``` 此相对,普通成员函数则是用来描述一类事物的公共行为。它们有明确的返回值类型(如果不需要返回值,则应声明为`void`),并且其名称只需符合标识符的命名规则即可,无需类名一致[^1]。普通成员函数可以通过已存在的对象进行多次调用,以执行特定的操作或改变对象的状态。 从调用机制上看,构造函数是在创建对象时由系统自动调用的,而普通成员函数则需要开发者通过对象实例来手动调用[^1]。这意味着构造函数只能在对象创建时运行一次,而普通成员函数可以根据需要被调用多次。 此外,构造函数还支持重载,这意味着同一个类可以拥有多个构造函数,这些构造函数之间通过参数列表的不同来区分。这样做的目的是为了允许灵活的对象初始化方式。比如,除了无参构造函数外,还可以有一个带参数的构造函数,用于根据传入的参数设置对象的初始状态[^2]。 综上所述,构造函数普通成员函数之间的主要差异体现在以下几点: - **用途**:构造函数专用于初始化新创建的对象;而普通成员函数则用于实现对象的行为。 - **返回值**:构造函数没有返回值类型;普通成员函数必须指定返回值类型。 - **调用时机**:构造函数仅在对象创建时自动调用;普通成员函数则由程序员决定何时调用。 - **可调用次数**:构造函数对于每个对象只会被调用一次;普通成员函数可以在程序执行过程中被多次调用。 理解这两者之间的区别有助于更好地设计类结构管理对象生命周期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值