高阶 JavaScript 第五天

深拷贝:

        function deepcopy(main,get){
            for(var key in main){// 遍历 main的成员
                if(main.hasOwnProperty(key)){// 只需要拷贝 main的实例成员
                    if(typeof main[key] == "object"){//发现是引用类型
                        get[key] = Array.isArray(main[key]) ? [] : {};//判断是数组还是对象
                        deepcopy(main[key],get[key]);//对该引用类型进行下一轮拷贝
                    }
                    else{
                        get[key] = main[key];//值类型直接拷贝,不会有数据共享问题
                    }
                }
            }
        }

class语法,class继承:

        class Animal{
            constructor(name,age){
                this.age = age;
                this.name = name;
            }
            say(){
                console.log(this.age,this.name);
            }
            static Ic(){
                console.log(1);
            }//静态成员添加方法 static 
        }



        //继承
        class Person extends Animal{
            constructor(name,age){
                super(name,age);
            }
            id = "#1";
            sayhi(){
                console.log(2);
            }
        }

arguments:

        function add(){
            var sum = 0;
            for(var i = 0;i<arguments.length;i++){
                sum += arguments[i];
            }
            return sum;
        }
        //arguments 是伪数组,无法用for in 循环遍历
        console.log(add(1,2,3,4));

eval(): 自调用,可以将字符串解析成可运行的script语言,还可以用来做加减运算

toString():

        var  a = 100;
        console.log(a.toString());
        console.log((100).toString(2));
        console.log((100).toString(8));
        console.log((100).toString(16));

        var arr = [1,2,3,4,"123"];
        console.log(arr.__proto__);
        Array.prototype = Object.prototype;//系统自带的构造函数对象的原型对象无法修改
        console.log(arr.toString());//Array原型对象自带toString方法
        console.log(Object.prototype.toString.call(arr));//所以借用
        var arr2 = [1,2,3,4,5];
        console.log(arr2.toString());
        //解决 Array.isArray 的兼容问题
        function isArray(arr){
            if(Array.isArray){
                return Array.isArray(arr);
            }else{
                if(Object.prototype.toString.call(arr) == "[object Array]"){
                    return true;
                }
                return false;
            }
        }
        console.log(obj.propertyIsEnumerable("constructor"));//不能枚举父级的

检查类型的四种方法:

        function Person(a){this.a = a};
        var now = new Person(1);
        var arr = [];
        console.log(typeof now);
        console.log(now.constructor);
        console.log(now instanceof Person);
        console.log(now.toString());
        console.log(Object.prototype.toString.apply(arr)); 

作用域的安全问题:

        function Person(age){
            if(this == window){
                return new Person(age);
            }
            if(this instanceof Person){
                return new Person(age);
            }
            if(!new.target){
                return new Person(age);
            }
            this.age = age;
        }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值