call与apply的应用场景
程序员文章站
2022-07-12 11:20:24
...
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>oop</title>
<script type="text/javascript">
/*
call/apply的功能:
1、调用函数
如果call、apply第一个参数传递null或者undefined,那么函数中this不改变
如果传递别的数据类型就会改为对应的类型
2、改变所调用函数的内部this指向
3、借用别的对象的方法
4、转化类数组
*/
// 调用函数
// function foo(n){
// console.log(n);
// console.log(this);
// }
// foo(123);
// foo.call(null,123);
// foo.apply(null,[123]);
// ---------------------------
// 改变函数this指向
// function foo(n,m){
// return this.a + this.b + m + n;
// }
// var obj1 = {
// a : 1,
// b : 2
// }
// var obj2 = {
// a : 11,
// b : 22
// }
// var ret = foo.call(obj1,1,2);
// var ret1 = foo.apply(obj2,[11,22]);
// console.log(ret);
// console.log(ret1);
// --------------------------------
// 借用别的对象方法
// var m = Math.max(12,32,434,435,34,34,34);
// console.log(m);
// var arr = [12,32,434,435,34,34,34];
// var max = Math.max.apply(null,arr);
// var min = Math.min.apply(null,arr);
// console.log(max,min);
// ---------------------------------
// 转化类数组
// 类数组与数组的相同点:1、都是对象;2、都有整数形式索引;都有length属性
// 不同点:1、类数组没有数组相关方法
var obj = {0:'abc',1:'hello',2:'message',length:3,abc:'hello'};
// var arr = [1,2,3,4,5,6];
// var arr1 = arr.slice(0,1);
// console.log(arr1);
var arr = [12,32,434,45,455];
// arr.push(1,2,3);
// console.log(arr);
// Array.prototype.push.call(arr,1,2,3,4);
// Array.prototype.push.apply(arr,[1,2,3,4]);
// Array.prototype.push.apply(arr,obj);
// console.log(arr);
var arr1 = Array.prototype.slice.call(obj);
arr1.push('tom and jerry');
console.log(arr1);
</script>
</head>
<body>
</body>
</html>
上一篇: 获取微信公众号用户信息
推荐阅读
-
基于C#中IDisposable与IEnumerable、IEnumerator的应用
-
深入理解Java对象的序列化与反序列化的应用
-
深入多线程之:用Wait与Pulse模拟一些同步构造的应用详解
-
springboot中事务管理@Transactional的注意事项与使用场景
-
C#中的应用程序接口介绍及实现,密封类与密封方法
-
C#栈和队列的简介,算法与应用简单实例
-
PHP中单例模式的使用场景与使用方法讲解
-
Java并发编程Callable与Future的应用实例代码
-
深入理解Java对象的序列化与反序列化的应用
-
基于C#中IDisposable与IEnumerable、IEnumerator的应用