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);

JS学习:第一周——NO.4继承的更多相关文章

  1. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验【中英】

    [吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第一周测验[中英] 第一周测验 - 深度学习简介 和“AI是新电力”相类似的说法是什么? [  ]AI为我们的家庭和办公室的个人设备供电 ...

  2. 201671010140. 2016-2017-2 《Java程序设计》java学习第一周

       java学习第一周        本周是新学期的开端,也是新的学习进程的开端,第一次接触java这门课程,首先书本的厚度就给我一种无形的压力,这注定了,这门课程不会是轻松的,同时一种全新的学习方 ...

  3. Java学习第一周

    第一周学习了JDK的安装和环境的配置,初步了解了Java与C的不同之处,学习了Java的变量.基本数据类型.以及面向对象的基础.并且自行完成了一些简单Java程序的编写. (1)学习了为什么使用抽象类 ...

  4. 20165213 java学习第一周

    20165213 -2018-2<Java程序设计>第一周学习总结 教材学习内容总结 java的四个特点:面向对象.平台无关性.动态性.简单. java编写程序步骤:再有jdk的情况下,先 ...

  5. Java学习第一周博客

    20145307<Java程序设计>第一周学习总结 教材学习内容总结 首先学习安装Java有两种方法,一种是用Eclipse直接编辑输出,另一种方法是用记事本之后用win+G开启cmd运行 ...

  6. H5学习第一周

    已经接触H5一个周了,经过学习,总算对H5有了一些了解和认知,下面就总结一下我对H5的认知和感悟. 首先接触的是H5的常用标签[meta],它有其以下常用属性 1.charset属性.单独使用,设置文 ...

  7. Three.Js学习第一天

    因为工作需求,最近接触到了ThreeJs库,国内学习文档的确少,所以在这里写下bolgs记录学习史,并且给后面学习的人尽一份微博之力. 3D场景依靠WebGL技术.目前支持比较好的浏览器,谷歌.火狐. ...

  8. Java学习第一周心得体会

    一周的学习很快就过去了,说说我个人的总结吧! 下面几个是我觉得需要牢牢记住的 1.Java的执行机制:先编译.再解释 2.变量以及基本数据类型 3.强类型编程语言:要求变量的类型与值的类型要一致 4. ...

  9. JS学习第一课

    1.js 按照编写顺序执行 2.输出使用document.write. 3.申明数组 var array = [1,2,3,5] ;  var arrStr = ["sgsg",& ...

随机推荐

  1. web视频添加webvtt字幕测试

    1.使用MP4硬字幕,如下, 2.使用HTML5 添加webvtt字幕,可惜到现在还没有测试成功.

  2. [LeetCode] Different Ways to Add Parentheses 添加括号的不同方式

    Given a string of numbers and operators, return all possible results from computing all the differen ...

  3. Spark Rdd coalesce()方法和repartition()方法

    在Spark的Rdd中,Rdd是分区的. 有时候需要重新设置Rdd的分区数量,比如Rdd的分区中,Rdd分区比较多,但是每个Rdd的数据量比较小,需要设置一个比较合理的分区.或者需要把Rdd的分区数量 ...

  4. 【Mysql】 局域网远程连接问题

    设置了 user 表 的 host为‘%’ 为什么局域网还是连接不上: 新建查询-->分别执行 1.GRANT ALL PRIVILEGES ON *.* TO'root'@'%' IDENTI ...

  5. 【MySQL】mysql分页调用

    存储过程: CREATE DEFINER=`root`@`%` PROCEDURE `Proc_PageCondition`(p_cloumns varchar(500), p_tables varc ...

  6. secureCRT

    配色方案 1

  7. [原创开源项目]EPUBBuilder一款在线的epub电子书编辑工具

    epub 感觉自己么么哒, epub书:国外最流行的电子书格式: epub电子书介绍: epub全称为Electronic Publication的缩写,意为:电子出版, epub于2007年9月成为 ...

  8. SQL Server存储过程创建和修改

    create proc Get_Data( @Del_ID varchar(36))asselect * from Depts where DeptId=@Del_ID select * from D ...

  9. js正则表达式(1)

    定义正则: var reg = new RegExp('a'); //实例化对象,参数是我们想要制定的规var reg = /a/; //简写方法 正则的常用方法: 1.test():在字符串中查找符 ...

  10. 如何在MyEclipse上添加更换JRE

    如何在myeclipse上添加更换JRE 由于兼容性的问题,有些WEB项目会依赖jdk的版本.如果需要更换jdk,那么,知道如何更换JRE的方法很有必要. 一种在myeclipse上添加和更换JRE的 ...