call()和apply()
在调用函数时,如果不传入参数,就是正常调用,此时函数执行时候的this
就是window
如果使用call()
或者apply()
进行调用,并且在调用时将一个对象指定为第一个参数,那么这个对象将会成为函数执行时的this。
如果需要传入函数的其他实参:
call()
方法可以将实参在对象之后依次传递:fun.call(obj,2,4);
apply()
方法需要将实参封装在数组中统一传递:fun.apply(obj,[2,3]);
this
- 以函数形式调用时,this永远都是window
- 以方法的形式调用时,this是调用方法的对象
- 以构造函数的形式调用时,this是新创建的对象
- 使用call()或者apply()并传入参数调用时,this是指定的那个对象
arguments
在调用函数时,浏览器每次都会传递两个隐含参数:
1、函数的上下文对象this
2、封装实参的对象arguments:
- arguments是一个类数组对象,可以通过索引操作数据,也可以获取长度
- 在调用函数时,我们所传递的实参都会在arguments中保存
arguments.lenght
可以用来获取实参长度arguments[1]
表示第二个实参- arguments有一个
callee
属性,这个属性对应一个函数对象,就是当前正在执行的函数的对象
Date对象
在JS中使用Date对象来表示一个时间
var d = new Date();
console.log(d);
如果直接使用构造函数创建一个Date对象,则会封装为当前代码执行的时间。
可以在构造函数中创建一个表示时间的字符串作为参数,创建一个指定的时间对象。
var d2 = new Date("12/03/2016 11:12:30");
console.log(d2);
var date = d2.getDate();
console.log(date);
var time = d2.getTime();
console.log(time/1000/60/60/24/365);
time2 = Date.now();
console.log(time2);
一些方法:
getDate()
获取是一个月中的哪一天getDay()
获取是周几,会返回一个0-6的值getMonth()
获取月份,会返回一个0-11的值getFullYear()
获取年份- 小时、分钟、秒等等
getTime()
返回一个时间戳。从格林威治标准时间的1970年1月1日 0时0分0秒到当前日期所花费的毫秒数。秒=1000毫秒)
Math
Math和其他对象不同,它不是一个构造函数。
它属于一个工具类不用创建对象,里面封装了数学运算相关的属性和方法。
比如:
Math.PI
表示圆周率abs()
返回数的绝对值
console.log(Math.abs(-1));
Math.round()
四舍五入Math.max(x,y,z)
获取最大值Math.min()
最小值Math.random()
生成一个0-1之间的随机数
for(var i=0; i<10; i++){
console.log(Math.round(Math.random()*8)+2);
};
生成一个x-y之间的随机数:
Math.round(Math.random()*(y-x)+x)