javaScript设计模式之原型模式

        我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。字面意思来理解,那么prototype就是通过调用构造函数而创建的那个对象实例的原型对象。使用原型对象的好处是可以让所有的对象实例共享它所包含的属性和方法。换句话说,不必在构造函数中定义对象实例的信息,而是可以将这些信息直接添加到原型对象中。

    // 创建一个构造函数
    function Person(name, age) {
        this.name = name;
        this.age = age;
    }
    // 在Person的原型上添加方法
    Person.prototype={
        speck:function(){
            console.log("我的姓名是 " + this.name + " 年纪 " + this.age);
        },
    }
    // 创建Person的实例
    var person1 = new Person("张三", 25);
    var person2 = new Person("李四", 30);

    // 调用原型上的方法
    person1.speck(); // 输出: 我的姓名是 张三 年纪 25
    person2.speck(); // 输出: 我的姓名是 李四 年纪 30

定义了一个Person构造函数,它接受nameage作为参数,并将它们赋值给新创建的对象的nameage属性。然后在Person的原型上添加了一个speck方法。这样通过new Person()创建的实例都将继承这个方法。最后,我们创建了两个Person的实例,并调用了它们的speck方法。

使用ES6创建

// 使用ES6的class关键字定义一个Car类
    class Car {
        constructor(color, make, model) {
            // 在构造函数中定义实例属性
            this.color = color;
            this.make = make;
            this.model = model;
        }

        // 在类上定义方法,这些方法会成为原型方法
        startEngine() {
            console.log('startEngine!');
        }

        stopEngine() {
            console.log('stopEngine!');
        }

        describe() {
            console.log(` ${this.color} ${this.make} ${this.model}.`);
        }
    }

    // 创建Car类的实例
    const myCar = new Car('宝石蓝', '拖拉机', 'S500');
    const anotherCar = new Car('蓝宝石', '三轮车', 'S600');

    // 调用实例方法
    myCar.startEngine(); // 输出:startEngine
    anotherCar.startEngine(); // 输出: startEngine

    myCar.describe(); // 输出: 宝石蓝 拖拉机 S500
    anotherCar.describe(); // 输出: 蓝宝石 三轮车 S600

    myCar.stopEngine()// 输出: stopEngine
    anotherCar.stopEngine(); // 输出: stopEngine

        使用 class 关键字定义了一个名为 Car 的类。类定义中包含了一个 constructor 方法,它是类的构造函数,用于初始化新创建的对象实例。在 constructor 方法中,我们定义了 colormake 和 model 这三个实例属性,并将传入的参数值赋给它们。在类定义中直接定义的方法(如 startEnginestopEngine 和 describe)会自动成为类的原型方法。这意味着所有通过 new Car(...) 创建的实例都会继承这些方法。使用 new 关键字和类名 Car 创建类的实例。每个实例都会有自己的 colormake 和 model 属性值。与ES5中的原型模式一样,我们可以直接通过实例来调用定义在类上的方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值