关于 js 中的 call 和 apply使用理解

  在学习新的东西时候,碰到以前看过而又不理解,或则记忆不深的地方不妨回头看看书里知识点,有助于加深理解。正所谓--温故而知新。

  废话不多说,直接上代码:

  第一节:一个简单的例子
     function add(a,b){
console.log(a+b);
} function sub(a,b){
console.log(a-b);
} add.call(sub,3,2); //5

总结:以上代码 定义两个方法,而最后一句话,不妨理解为 sub对象 调用了 add对象 的方法,并把参数也带入方法里。

 第二节:深入理解 call 和 apply

  call 和 apply的定义说明:call和apply 是函数的非继承方法,在某个特定作用范围内调用某个函数,设置函数体内this对象的值,

     function NJie(){
this.name = "Njie",
this.sayName = function(){
console.log(this.name);
}
} function KK(){
this.name ="KK";
} var n = new NJie();
var k = new KK(); n.sayName(); //NJie
n.sayName.call(k); //KK

  总结:比如说:k 对象没有 sayName 的函数,而 n 有这个函数,那 k 就通过call 来借 n的 sayName使用,当然也要把在 k 中的值带入到方法里。

第三节:call 和 apply 的 区别

  说明:call 和 apply 的区别,在于两个传入的参数的方式不一样

  

    // 父类
function Person(name,age){
this.name = name;
this.age = age;
} //子类 学生
function Student(name,age,grade){ Person.apply(this,arguments); //子类继承了父类
// Person.call(this,name,age); //当然,也可以使用 call的方法
this.grade = grade;
} //创建一个学生的实例
var s1 = new Student("倪杰","23","北京大学成人班,一年级"); console.log("您好,",s1.name,"您今年",s1.age,"岁,就读于",s1.grade,",实在太棒了");

  总结:

    以上的例子有两个要点:

      1,是可以使用 call的方法来做 js 的继承处理;

      2,call 和 apply 的区别主要是在于后面的传入参数方式不同,call传参数要把参数一一列出来,而apply则可以使用 arguments 这个属性直接带过去.

  

关于 js 中的 call 和 apply使用理解的更多相关文章

  1. JS中的call()和apply()方法理解和使用

    1.方法定义call方法: 语法:obj.method.call(thisObj[,arg1[, arg2[, [,.argN]]]]) 定义:调用对象(obj)的一个方法(method),以另一个对 ...

  2. js笔记——理解js中的call及apply

    call及apply在js里经常碰得到,但一直感觉很陌生,不能熟练使用.怎样才能熟练应用呢? 为什么存在call和apply? 在javascript OOP中,我们经常会这样定义: function ...

  3. JS中的call、apply、bind方法

    JS中的call.apply.bind方法 一.call()和apply()方法 1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]] ...

  4. 快速理解js中的call,apply的作用

    今天被人问到js中的call,apply的区别和用途,解释了一番后,想到之前在逼乎上看到一位小伙伴生动形象的解释 本身不难理解,看下MDN就知道了,但是不常用,遇到了,还要脑回路回转下.或者时间长了, ...

  5. JS中的call()和apply()方法(转)

    转自:http://uule.iteye.com/blog/1158829 JS中的call()和apply()方法 博客分类: JS   1.方法定义 call方法: 语法:call([thisOb ...

  6. JS中的call()和apply()方法

    1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...

  7. js中的call()与apply()

    js中的call()函数和apply()函数: 1.主要作用:是用于指定作用域和传参 (1)用于指定作用域 window.color = "red"; var o = { colo ...

  8. 理解JS中的call、apply、bind方法(*****************************************************************)

    在JavaScript中,call.apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向. call.apply.bind方法的共同点和区别:app ...

  9. js 中arguments,call,apply,bind的使用

    //对于 arguments和this, 每个函数都有自己独有的arguments和this, 且不进行链式查找 //arguments是什么? //答:1:arguments是收到的实参副本 //2 ...

随机推荐

  1. Jquery 分页插件 Jquery Pagination

    Jquery 分页插件 Jquery Pagination 分页插件来说,我觉得适用就行,尽量简单然后能够根据不同的应用场景能够换肤.展现形式等. 对于初学者想写分页插件的同学,也可以看下源码,代码也 ...

  2. ABP应用层——应用服务(Application services)

    ABP应用层——应用服务(Application services) 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之15.ABP应用层——应用服务(Applic ...

  3. java 选择文件夹对话框

    java swing 选择文件夹对话框 import java.io.File; import javax.swing.JFileChooser; public class Test2 { publi ...

  4. Cocos2d-x 3.2 大富翁游戏项目开发-第五部分 单机游戏-级别选择ScrollView

    于MenuScene.cpp 点击单机游戏后会调用 Director::getInstance()->pushScene(MapChooseScene::createScene()); 进入到关 ...

  5. eclipse 组态xdebug

    1.打开浏览器打开phpinfo页面视图PHP版本号.TS(线程安全)版本NTS(非线程安全)版本.以及VC6版本号是VC9版本号 2.和上面版本号相应的xdebug:http://xdebug.or ...

  6. python_基础学习_03_正则替换文本(re.sub)

    python的正则表达式模块是re,替换相关的方法是sub. 例如我们要做如下的替换将所有的 替换为空格,可以通过下面代码实现: import re input = 'hello world' #第一 ...

  7. 前端学习笔记(zepto或jquery)——对li标签的相关操作(三)

    对li标签的相关操作——八种方式遍历li标签并获取其值 $("ul>li").forEach(function(item,index){ alert(index+" ...

  8. 【百度地图API】如何制作“从这里出发”“到这里去”——公交篇

    原文:[百度地图API]如何制作"从这里出发""到这里去"--公交篇 摘要: 百度地图首页上的“从这里出发”“到这里去”,一直是开发者们很热衷的一个功能.那么, ...

  9. SSAS系列——【01】准备知识

    原文:SSAS系列--[01]准备知识 关于SQL Server 产品,我从2004年就开始使用了,SQL Server 2K,2K5,2K8,到如今已经准6年了,说来惭愧,这六年来所涉及的内容都是在 ...

  10. CentOS采用grub进 single状态

    当系统文件错误,有可能无法进入系统.或者您忘记了原来的系统password. 用这种方法可以,进single状态,编辑系统启动文件或更改的错误password. 1.重新启动系统. 2.按" ...