javascript关于call与apply方法详解
来源:互联网 发布:windows system 编辑:程序博客网 时间:2024/05/03 10:51
每一个函数都包含两个非继承而来的方法:call与apply。这两个方法的用途都是在特定的作用域中调用函数,也就是动态改变函数体内this对象。换句话说,可以将函数对象继承到当前上下文(this)中来使用。
官方示例1:
function Product(name, price) { this.name = name; this.price = price;}function Food(name, price) { Product.call(this, name, price); this.category = 'food';}function Toy(name, price) { Product.call(this, name, price); this.category = 'toy';}var cheese = new Food('feta', 5);var fun = new Toy('robot', 40);
官方示例2:
var person = { firstName:"John", lastName: "Doe", fullName: function () { return this.firstName + " " + this.lastName; }}person.fullName(); // Will return "John Doe"var myObject = { firstName:"Mary", lastName: "Doe",}person.fullName.call(myObject); // Will return "Mary Doe"
绑定一些函数用于传递参数
function sum(x , y){ return x+y;}function call1(num1 , num2){ return sum.call(this , num1 , num2);}function apply1(num1 , num2){ return sum.apply(this , [num1,num2]);}
扩充作用域
window.color = 'red';var obj = {color:'blue'};var obj2 = {color:'yellow'};function showColor(){ alert(this.color);}//showColor(); //red//showColor.call(window); //red//showColor.call(obj); //blue
可以做到方法与对象的解耦
call方法的简单模拟与实现
function test1(a , b){ return a+b;}// 自定义的对象(js中大写的函数名默认为自定义对象)function Obj(x, y){ this.x = x ; this.y = y ; return x*y;}var o = new Obj(10 , 20);o.method = test1 ;alert(o.method(o.x , o.y));delete o.method;test1.call(o,o.x ,o.y); //200
阅读全文
0 0
- javascript关于call与apply方法详解
- Javascript中关于call()与apply()详解
- Javascript call(),apply()方法详解
- javascript apply()与call()方法
- javascript中call apply 与 bind方法详解
- Javascript中call,apply,bind方法的详解与总结
- javaScript call()方法与apply方法
- javascript call和apply方法详解
- javascript 中的apply()和call()方法详解
- 深入学习JavaScript: apply call方法 详解
- Javascript中的apply与call详解
- Javascript中的apply与call详解
- Javascript apply与call函数详解
- Javascript中的apply与call详解
- Javascript中的apply与call详解
- Javascript中的apply与call详解
- Javascript中的apply与call详解
- Javascript中的apply与call详解
- 刚刚!没参加饭局的马云用iDST的语音技术买了张地铁票,竟然没说唤醒词
- 听说IBM发布了一款「为AI而生」的芯片?这事儿要从AI数据的传输与存储说起
- zTree初体验(一)获取所有选中节点数据
- Redis为什么使用单进程单线程方式也这么快
- 经济学人评AI行业现状:小心那些带着礼物来的极客们
- javascript关于call与apply方法详解
- metasploit魔鬼训练营第三天笔记
- 【Codeforces 900C】Remove Extra One(BIT思维)
- linux管道符和通配符
- 「为了让无人车更可靠, 我们要自己研发芯片」不甘寂寞的马斯克又做出一个重大决定
- Java集合类: Set、List、Map、Queue使用场景梳理
- IM开发(2)-XMPP iOS开发
- 这或许是苹果今年最大一笔收购,4亿美元买下一个音乐识别app究竟为了什么?
- phpstorm激活大全--持续更新