从零开始学_JavaScript_系列(29)——apply和call
来源:互联网 发布:王菲演唱会网络直播 编辑:程序博客网 时间:2024/06/09 03:15
讲道理说,这两个方法在开发中直接使用的并不多(当然也可能是我比较低端┑( ̄Д  ̄)┍),一般都用封装好的。
(47)apply和call
这个之前没研究过,今天简单的看了一下。
命令
简单介绍
例子
apply
将某个函数提供给另外一个对象使用,类似继承
提供的方法.apply(获取方法的对象, 参数);
call
改变函数中this指向的对象
方法.call(被this指向的目标, 传给方法的参数).
共同点:两个都是函数对象的方法。
call的说明:(略微修改自他人的博客,博客链接下附)
<!doctype html><html><head></head><body><input type="text" id="idTxt" value="input text"><script type="text/javascript"> var value = "global var"; function mFunc() { this.value = "member var"; } function gFunc() { alert(this.value); } window.gFunc(); // 全局的值 gFunc.call(window); // 全局的值,this指向参数 gFunc.call(new mFunc()); // this指向mFunc gFunc.call(document.getElementById('idTxt')); // this指向这个dom结点</script><script language="javascript"> var func = new function () { this.a = "func"; } var func2 = function (x, y) { var a = "func3"; alert(this.a); alert(x); alert(y); } func2.call(func, "func2", 'func3'); //this指向func这个函数,x是传递的参数</script></body></html>
关于用call来进行继承(同样改自某博客的例子)
<!doctype html><html><head></head><body><script type="text/javascript"> function baseA() // base Class A { this.member = "baseA member"; this.showSelfA = function() { window.alert(this.member); } } function baseB() // base Class B { this.member = "baseB member"; this.showSelfB = function() { window.alert(this.member); } } function extendAB() // Inherit Class from A and B { baseA.call(this); // call for A baseB.call(this); // call for B // this指向的是extentAB这个方法,这里相当于将上面两个方法都执行了一遍, // 由于后调用的baseB,而两个都有member属性,因此后调用的baseB的member覆盖了baseA的member, // 但showSelfA和showSelfB没有冲突,因此两个方法都在 // 这种写法相当于形成了一个继承的形式。 } window.onload = function() { var extend = new extendAB(); extend.showSelfA(); // show A extend.showSelfB(); // show B }</script></body></html>
博客链接:
http://blog.csdn.net/sunboy_2050/article/details/6592082
apply可以参照这个(我之前写的):
apply是函数对象(function Function(){})的prototype方法中的一个方法
可以通过console.dir(Function)来打印全部方法
又因为所有函数都继承于Function函数,因此,所有函数都继承了这个方法。
apply的功能是,函数借用。将函数借用给一个对象,帮助他实现函数所定义的逻辑的功能。
如例子:
function ab(x, y) { this.x = x; this.y = y;}ab.prototype.move = function (x, y) { this.x += x; this.y += y}var c = new ab(1, 1);console.log(c);c.move(2, 2)console.log(c);p = {x: 0, y: 0, z: 0}console.log(p);c.move.apply(p, [5, 5]) //在这步,ab的实例c将move方法提供给了p,参数是数组console.log(p);
输出结果为:
ab {x: 1, y: 1}
ab {x: 3, y: 3}
Object {x: 0, y: 0, z: 0}
Object {x: 5, y: 5, z: 0}
注:如果c中没有y,那么在
0 0
- 从零开始学_JavaScript_系列(29)——apply和call
- 从零开始学_JavaScript_系列(30)——NodeList
- 从零开始学_JavaScript_系列(32)——事件广播
- 从零开始学_JavaScript_系列(43)——Symbol简述
- 从零开始学_JavaScript_系列(47)——Reflect
- 从零开始学_JavaScript_系列(58)——Thunk函数
- 从零开始学_JavaScript_系列(59)——async函数
- 从零开始学_JavaScript_系列(44)——ES6新增数据结构:Set类型和WeakSet
- 从零开始学_JavaScript_系列(45)——ES6新增数据结构:Map和WeakMap
- 从零开始学_JavaScript_系列(51)——Promise(4)Promise.resolve和Promise.reject
- 从零开始学_JavaScript_系列(53)——Generator函数(1)基本概念和示例
- 从零开始学_JavaScript_系列(54)——Generator函数(2)简单应用、throw和return
- 从零开始学_JavaScript_系列(62)——class(3)setter和getter、Generator、async函数
- 从零开始学_JavaScript_系列(63)——class(4)静态方法和new.target
- 从零开始学_JavaScript_系列(15)——js系列<3>(转为字符串,截取字符串)
- 从零开始学_JavaScript_系列(16)——js系列<5>(正则表达式)
- 从零开始学_JavaScript_系列(19)——js系列<6>闭包
- 从零开始学_JavaScript_系列(67)——es6的import和export(chrome61版本后可用)
- eclipse导入git项目原先依赖的库不识别
- java的system.arraycopy()方法
- 可重入函数与不可重入函数
- 这是一个分割线ionic和react的分界线
- JS Window.Open 打开窗口详解
- 从零开始学_JavaScript_系列(29)——apply和call
- scrollview smoothScrollTo不起作用的问题
- Spring不同类型的注入方式
- Java的GC与finalize函数
- PHP+Mysql+jQuery找回密码
- Leetcode题解 396. Rotate Function
- 赛马网基本算法之--马路上的路灯
- 多线程编程基础知识
- js jquery搜索下拉框 自动选中 搜索到结尾处从头搜索