原型扩充方法及函数角色

  1. 写在内置类原型上的方法,实例调用的时候:“实例.xxx()",方法中的this是要操作的实例。
    向内置类原型扩充方法:把一些公共的方法扩展到内置类的原型上,调用起来非常的方便。
    <script>
        Array.prototype.unique=function unique(){
        if(!Array.isArray(this)) throw new TypeError('确保操作的是一个数组!');
        return Array.from(new Set(this));
    }
    let arr=[2,3,1,2,3,4,5,2,4,4,5,3];
    console.log(arr.unique().sort((a,b)=>a-b));
    </script>
  1. JS中创建值有两种方案:字面量方式、构造函数方式。两者创造出来的值都是所属类的实例。
    【 基本数据类型值】:
    字面量方式创造出来的是基本类型值
    构造函数创造出来的是引用数据类型值
    Symbol和BigInt不是构造函数,不能使用new执行来创建值
       //字面量方式创造出来的是基本类型值
        let n=10;   //数值
       //构造函数创造出来的是引用数据类型值
        let m=new Number(10); //对象
        m.toFixed(2);
        n.toFixed(2);   //浏览器在处理基本类型值调用原型上方法的时候,其实内部也是会把基本类型值变为对象实例模式,再次调用的

【引用数据类型值】:
两种创建方法的结果是一样的

        let obj1={};
        let obj2=new Object();

new Array(10)是创建一个长度为10的数组

基于内置类的扩展方法-面试题如下:

    <script>
        const validateNum=function validateNum(num){
            num=Number(num);
            return isNaN(num)?0:num;
        };
        Number.prototype.plus=function plus(num){
            //this是引用数据类型值(基于call/apply/bind等改变this指向,this可以是基本数据类型的值)
            //console.log(typeof this);  "object"
            //对象+数值:大部分情况都会变为字符出拼接,除{}+num及当前对象有原始值[[PrimitiveValue]]
            // +将对象转换为数字,首先调用valueOf方法获取原始值(number/string/boolean/date...),如果有原始值,则直接获取到原始值的结果,并参与到后续的运算中
            // +如果没有原始值,则继续调用toString先转换为字符串,后续在基于Number转换为数字
            num=validateNum(num);
            return this+num;
        };
        Number.prototype.minus=function minus(num){
            num=validateNum(num);
            return this-num;
        };
        let n=10;
        let m=n.plus(10).minus(5);
        console.log(m);   //15
    </script>
  1. Function.prototype(原型)是一个函数,Object.prototype(原型)是一个对象。
    在这里插入图片描述

  2. 函数三种角色:
    普通函数(闭包作用域)
    构造函数(new、类和实例)
    普通对象(键值对)
    三种角色没有必然的联系
    在这里插入图片描述
    在这里插入图片描述

  3. 阿里面试题
    在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值