讲讲实例化原理和包装类

实例化原理和包装类
摘要由CSDN通过智能技术生成

学习前端在b站有许许多多的视频,但绝大部分都是如同手册和文档一样是基于使用的,通过反复练习去记忆,这样效率不高也容易忘记。之前发现一个好看不火的宝藏up,对于知识原理方面讲的很通俗透彻,个人感觉很好。这些是我学习过程中的个人简易总结,推荐学习原版,感兴趣私聊我吧,有些事情讲究缘分。

实例化原理

言归正传,我们知道一般把new出来的构造函数的过程叫做实例化。我们都会通过new来使用,但清楚实例化的原理吗?

<script>
        function Car (color,brand){
            this.color = color;
            this.brand = brand;
        }
        var car = new Car('red','Benz');
        console.log(car);
    </script>

这就是实例化过程,里面的this是什么呢?从预编译的角度来分析一下,GO里面存着Car function(){} 和car变量,在没执行时不关注Car函数体里面的是什么,也没有意义。当new Car()时就执行Car函数了。

<script>
        function Car(color, brand) {
            //   this = {}
            this.color = color;
            this.brand = brand;
            //上面相当于
            // this {
            //     color : color,
            //     brand : brand,
            // }
            //  return this;  隐式存在
        }
        var car = new Car('red', 'Benz');
        console.log(car);
    </script>

比较一下这个和上面的,其实实例化的过程中隐式存在了先将this定义成一个空对象,然后把属性写进来,最后返回出去,这个对象从AO到了全局GO上。this的指向也从Windows变成指向实例化对象car。

function Car(color, brand) {
            me = {};
            me.color = color;
            me.brand = brand;
             return me; // 隐式存在
        }
        var car = Car('red', 'Benz');
        console.log(car);

我们把它改成这样同样可以,用普通函数的形式来写。这就是实例化的原理,核心是return出去,使用我们可以增删改查car,只不过new的是内置好了而且是隐式的。注意,return 出去的要是引用对象才行,基本类型无效。而且null和undefined不能添加属性和方法。

包装类

    什么是包装类呢,应该是new String() ,  new  Number(), new Boolean()。

        var a = 100;
        a.length = 2;
        var b = '100';
        b.length = 2
        console.log(a.length);
        console.log(b.length);

猜猜结果是什么?  结果是undefined 3 。为什么数字类型没有length属性,而字符串就有呢。

其实不是字符串有length属性,而是new String() 有length属性,new  Number()没有,系统其实进行内部转换。

// 包装类
        var a = 100;
        a.length = 2;//相当于new Number(a).length = 2
        console.log(new Number());//里面没length属性
        console.log(new String());//里面有length属性
        var b = '100';
        b.length = 2//相当于new String(b).length = 2 但没有地方存储length,b是string,不能存
        //故程序又会删除这个代码,delete
        console.log(a.length);
        console.log(b.length);//所以打印的是3,b.length = 2执行又删除,没有存储下来
        //那怎么办存下来能?只要进行包装类就能存储到原来的变量身上
        var c = new Number(100);
        c.length = 2;//相当于new Number(c).length = 2 存储length,c是包装类,可以存
        console.log(c);
        console.log( c.length);

就跟里面分析的一样,但如果修改string里面的length,好像无效,因为他已经有了length属性.

另外length用在数组里可以当做截断。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值