js call apply的使用
来源:互联网 发布:大数据存储技术研究 编辑:程序博客网 时间:2024/06/08 00:36
先说下区别 ,似乎除了参数之外没什么区别 apply第二个参数是一个数组
都是5.5的版本中出现的
言归正传
先看 call
文章的大概意思就是其 调用一个对象的一个方法,以另一个对象替换当前对象
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
thisObj 可选参数 将被用作当前对象的对象
arg1 , arg2,....
可选 将被传递方法序列
call方法可以用来代替另一个对象调用一个方法,call方法可将一个函数的对象上下文从初始的上下文改变为thisObj指定的新对象
顺便提一句如果没有thisObj对象,那么global对象就是thisObj对象
啥也不说了 来个例子就明白了
function add(a,b){ alert(a+b); } function sub(a,b){ alert(a-b); } add.call(sub,3,1);
你会发现运行的结果竟然是4 ,这是为什么呢?
其实就是add 替换了sub 然后 3 ,1 当做参数传递add 所以最后运行的结果就是4
在运行一下这个代码
function add(){ this.name = "long"; this.sendName = function(){ alert(this.name) } } var add = new add() add.sendName()
然后在运行
function add(){ this.name = "long"; this.sendName = function(){ alert(this.name) } }function addName (){this.name = 'zhang';}var add = new add();var addName = new addName();add.sendName.call(addName)
这个意思是将add的sendName方法放在addName中执行 所以运行的结果就是zhang
重头戏来了,call和apply用的最多的地方,,,,继承
先来个简单的例子方改变理解
function add(){ this.name = function(){ console.log("aaaa") } } function send(){ add.call(this); } var send = new send(); send.name()
什么?send怎么会有name方法 。。。。?????
这就是使用call实现的继承 add.call(this)的意思就是使用add对象来替代this对象,,而this指向的谁呢?所以send不就用了add的属性和方法了吗,,所以我们就很容易理解send调用add的方法是怎么回事了。
function add(){ this.name = function(){ console.log("aaaa") } }function send(){this.send =function(){console.log("bbb")}}function end(){add.call(this);send.call(this)}var end = new end();end.name();end.send();
这个例子是实现多重继承的。。怎么样很好理解吧????
说了这么多的call ,apply存在感似乎有点低,现在说一个apply使用的话怎么装逼
var arr= [3,41,5,74,2];alert(Math.max(arr))function arrs(arr){for(var i = 0 , arrar =arr[0] ; i < arr.length ; i++ ){arrar = Math.max(arrar , arr[i])}return arrar;}arrs(arr)function applyMax(arr){return Math.max.apply(null,arr)}applyMax(arr)
然后再来一个push的数组
var arr= [3,41,5,74,2];var arrLast = [1111,22222]function arrar(arr,arrLast){for(var i = 0 ; i < arrLast.length ; i++){arr.push(arrLast[i])}return arr;} arrar(arr,arrLast)
这似乎是一种常见的写法,,要是就这么结束了,那不是打脸啊。。。
var arr= [3,41,5,74,2];var arrLast = [1111,22222]function arrar(arr,arrLast){Array.prototype.push.apply(arr,arrLast)return arr} arrar(arr,arrLast)
最后运行一下这段代码,,
对于我们前端来说框架只不过是一种工具,但是基础确实我们在市场上存活的唯一法宝,,加油。。。。。
阅读全文
0 0
- js call apply的使用
- js 探讨call,apply,bind的使用
- Js 的 apply()、call()
- Js apply()、call()使用详解
- js之apply call使用
- JS apply()、call()使用详解
- js 的 apply / call 函数
- js的调用(apply,call)
- js的call和apply函数的使用
- js中call,apply,setCapture,releaseCapture的使用
- js中bind、call、apply的方法使用
- javascript apply|call的使用
- call 和 apply 的使用
- js call()和apply()方法使用
- Js中apply()与call()使用详解
- Js apply() 与call() 使用详解
- Js apply()和call()使用详解
- js中call与apply的应用
- FFMPEG(一)使用初探
- Word2vec加TextRank算法生成文章摘要
- MongoDB $type 操作符和 条件操作符
- 单体内置对象
- 20170714
- js call apply的使用
- redis配置文件
- 约瑟夫环-C++实现
- spark2.2 structured Streaming
- CodeForces 424 Div2 CBA题
- Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]
- Java 反射 使用总结
- List Copy
- HDU--2151--Worm(动态规划)