• JS学习:第一周——NO.4继承


    1.【关于call】
    作用:是用来改变this指向的,有两种参数
    第一种:第一个参数,用来改变this指向
    第二种:给call前面的函数传参,从第二个参数开始,给call前面的函数从左到右一个个的传参,参数以逗号形式分隔;
    2.【继承】
    ①call继承:把父类私有的属性和方法继承给子类私有;跟公有属性无关;
    function S{F.call(this)}
    ②原型链继承:把父类私有和公有的属性,都给了子类公有;把子类公有的作为父类的一个实例;原型链继承:跟子类私有属性无关;
    function S(){};
    S.prototype=new F;//把子类公有的作为父类的实例;
    var s=new S;
    console.dir(s);
    ③冒充继承:把父类私有+公有的的属性都给了子类私有;
       for in 循环只能遍历自定义的属性和方法,拿不到系统的属性和方法,比如constructor;
    function S(){
        //for in循环,只能遍历自定义的属性和方法;拿不到系统的属性和方法;
        for(var attr in f){
            this[attr]=f[attr];
        }
    }
    var s=new S;
    ④混合继承1:call继承+原型链继承;☆☆☆☆☆
    问题:子类私有中有父类私有的,子类公有也有父类私有;
    function S(){
        F.call(this);//子类私有继承父类私有;
    }
    S.prototype=new F;
    var s=new S;
    ⑤混合继承2:call继承+拷贝继承(extend);☆☆☆☆☆☆最常用
    function extend(obj2,obj1){
        for(var attr in obj1){
            obj2[attr]=obj1[attr];
        }
        return obj2;}
    function S(){
        F.call(this);
    }
    //公有通过extend方法,进行拷贝继承
    extend(S.prototype, F.prototype);
    var s=new S;
    ⑥混合继承3:call继承+Object.create()
    function S(){
        F.call(this);
    }
    function Tmp(){};
    Tmp.prototype= F.prototype;
    S.prototype=new Tmp;
    S.prototype.constructor=S;
    var s=new S;
    console.dir(s);
    3.【prototype和__proto__】
    prototype是谁的属性,它起什么作用?__proto__是谁的属性,它有什么作用?prototype和__proto__有什么联系?
    prototype是函数数据类型的属性;作用:存放公有属性和方法;
    __proto__是对象数据类型的属性;作用:原型链;值:当前实例所属类的原型
    prototype和__proto__联系:当前实例通过__proto__找到prototype这个原型;
    4.【闭包】
    当前函数被调用的时候,会形成一个私有作用域,保护里面的变量不收外界的干扰,函数的这个保护机制,叫做闭包。
    作用:1)防止全局变量名的冲突;
               2)封装;
               3)可以在比闭包中通过window.xxx修改全局属性。
    5.【回调函数】
    定义:把一个函数体作为参数传给另一个函数,
    1)被传进来的函数,callback,调用的次数,取决于我们自己的条件;
    2)callback()被调用的时候;可以进行传参;
    3)callback()被调用的时候,可以改变this的指向;
    4)callback()可以有返回值,返回值有几个取决于条件;
    var obj={};
    function fn(a){
        //a 代表的就是 f1这个函数;
        var ary=[];
        for(var i=0; i<4; i++){
            var res=a.call(obj,2,3);//f1();
            ary.push(res);
        }
        console.log(ary);
    }

    fn(function (n,m){
        alert(this+(n+m));
    });
     
    6.【总结this指向】
    1)当前元素被触发的时候,会调用一个函数,函数中的this指向当前这个元素;
    2)函数被调用的时候,点前面是谁,this就是谁;
    3)自执行函数中的this,是window;
    4)
    7.【forEach】
    * item:数组中的每一项;
    * index:索引;
    * input:原始数组;
    * */
    /*
    * forEach():作用-》遍历数组中的每一项;
    * forEach()有两个参数:参1:回调函数; 参2:用来改变this指向的;
    * forEach()中的回调函数,有三个参数:
    *   item->数组中的每一项内容
    *   index->索引;
    *   input:原始数组;
    *forEach()中回调函数的执行次数,取决于数组的长度;
    *forEach():没有返回值;
    * */
    //map的使用方式,跟forEach一样,但是,map有返回值;返回值是一个数组;数组中记录了每个回调函数的返回值;
    /*var res=ary.forEach(function (item,index,input){
        console.log(this)
    },obj);*/
    var res=ary.map(function(item,index,input){
        console.log(this);
        return item*100;//1000 2000
    },obj);
    console.log(res);
  • 相关阅读:
    Java
    paratest
    ccnet
    资料
    ccnet
    判断类被某个属性应用
    有趣的数学 -- 数学归纳法 -- 互不重叠的单位正方形
    排序算法 -- 堆排序
    APUE CH10 Signals
    APUE CH9 Process Relationship
  • 原文地址:https://www.cnblogs.com/HKCC/p/6054934.html
Copyright © 2020-2023  润新知