函数的方法call和apply
相同:
call和apply 这两个方法都是对函数对象的方法
function fun(){
alert("llll");
}
//三种一样的效果
fun.apply();
//fun.call();
//fun();
可以将一个对象指定为第一个参数
此时这个对象将会成为函数执行的this
function fun(){
alert(this.name);
}
var obj = {name:"obj"};
var obj2 ={name:"obj2"};
fun.apply(obj);
不同:
call()方法可以将实参在对象之后依次传递
var obj = {name:"obj"};
var obj2 ={name:"obj2"};
function fun(a,b){
console.log("a=" + a);
console.log("b=" + b);
}
//一个一个传
fun.call(obj,2,3);
//a=2
//b=3
apply()方法需要将实参封装到一个数组中统一传递
var obj = {name:"obj"};
var obj2 ={name:"obj2"};
function fun(a,b){
console.log("a=" + a);
console.log("b=" + b);
}
//数组中
fun.call(obj,[2,3]);
//a=2
//b=3
this的情况:
1.以函数形式调用时,this永远都是window
2.以方法的形式调用时,this是调用方法的对象
以构造函数的形式调用时,this是新创建的那个对象
使用apply和call调用时,this是指定的那个对象
数组类对象arguments
在调用函数时,浏览器每次都会传递两个隐含的参数
1.函数的上下文this
2.封装实参的对象arguments
auguments是一个类数组对象,不是数组
function fun(){
//检查是否为数组
// console.log(arguments instanceof Array);
console.log(Array.isArray(arguments));
}
//false
是一个类数组对象,也可以通过索引操作数据,也可以 获取长度
在调用函数时,我们所传递的实参都会在arguments中保存
arguments.length可以用来获取实参的长度
function fun(){
console.log(arguments.length);
}
fun("hello");
//1
我们即使不定义形参。也可以通过arguments来使用实参,只是比较麻烦arguments[0] 表示第一个实参
它里边有一个属性callee
对应一个函数对象,就是当前正在指向函数的对象arguments.callee
JavaScript 的Date对象
表示一个时间
- 当前时间
如果直接使用构造函数创建date对象
则会封装为当前代码执行的时间
var d = new Date();
console.log(d);
//Date Mon Aug 17 2020 09:19:17 GMT+0800 (中国标准时间)
- 创建一个指定的时间对象
需要在构造函数中传递一个表示时间的字符串作为参数
日期格式:月/日/年 时:分:秒
var d2 = new Date("12/03/2016 11:10:30");
console.log(d2);
//Date Sat Dec 03 2016 11:10:30 GMT+0800 (中国标准时间)
- getDate()获取日期对象是几号
var d = new Date();
console.log(d.getDate());
//17
- getDay()获取日期对象是周几
会返回一个0-6的值,0表示周日,1-6表示周1-6
var d = new Date();
console.log(d.getDay());
//1
- getMonth()获取日期对象是几月
会返回0-11的值,0表示1月,1表示2月。。。
var d = new Date();
console.log(d.getMonth());
//8
-
getFullYear()以四位数返回年份
-
d.getHours()获取日期对象是几时
0~23 -
d.getMinutes()获取日期对象是几分
0~59 -
d.getSeconds()获取日期对象是几秒
-
0~59
-
d.getMilliseconds()获取日期对象是几毫秒
0~999 -
getTime()获取当前日期的时间戳
时间戳:从格林威治标准时间的1970年1月1日 0时0分0秒到当前日期所花费的毫秒数
var d = new Date();
console.log(d.getTime());
//1597629722329
利用时间戳来测试代码执行的性能
var start = Date.now();
for(var i = 0;i < 100; i++){
console.log(i);
}
var finish = Date.now();
console.log(finish - start);
//2