创建对象的六种方式(包含工厂,原型,构造函数,混合,动态原型)

        //1. 字面量
        let a = { name: 'zhangsan' }

        //2. 工厂方式(Object关键字)
        let d = new Object();
        d.name = 'zhangsan'
        console.log(d.name)

        //3. 构造函数方法
        let B = function (name) {
            this.name = name
        }

        let c = new B('zhangsan')

        console.log(c.name)


        // 4. 使用原型
        let E = function () { }

        E.prototype.name = 'zhangsan3'
        E.prototype.eat = function () {
            alert('吃了苹果橘子')
        }

        let e2 = new E()
        console.log(e2.name)
        e2.eat()

        // 5 混合模式(原型+构造函数)

        let F = function (name) {
            this.name = name
        }

        F.prototype.sell = function () {
            alert('我买了' + this.name + '汽车')
        }

        let f = new F('比亚迪海陆u8')

        console.log(f.name)

       //6  动态原型的方式
        function Car(name, price) {
            this.name = name;
            this.price = price;
            // 是对 5 混合模式 的一种改善, 混合模式的封装性不够
            
            // 那么为什么加一个if判断呢?
            // 这里的if判断主要是判断是否是初次运行构造函数,如果初次运行才会去创建函数
            // 如果不判断第一次才创建函数的话,每一次实例化都会导致重复创造方法,由于方法本质上是函数,其实也就是在堆内存中又新建了一个对象空间存储函数,造成了不必要的资源浪费。
            // 所以我们只在第一次实例化的时候 给构造函数添加方法

            if (typeof Car.sell == "undefined") {
                Car.prototype.sell = function () {
                    alert("我是" + this.name + ",我现在卖" + this.price + "万元");
                }
                Car.sell = true;
            }
        }
        var camry = new Car("凯美瑞", 27);

        camry.sell();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值