function fun1(num1, num2, num3) {
//arguments对象是方法内部的一个对象
console.log(arguments);
//arguments对象身上的callee方法指向本身方法
console.log(arguments.callee == fun1);
//arguments对象通过索引可以获取方法参数
console.log(arguments[0]);
console.log(arguments[2]);
console.log(arguments[3]);//arguments调用 fun1方法可以不传参数,后面传参 可以获取
}
fun1(100, 200, 300)
console.log("--------------------------------------");
function systemMenu() {
console.log("***********学生管理系统*********************");
console.log("1.添加学生");
console.log("2.修改学生");
console.log("3.查询学生");
console.log("4.删除学生");
console.log("0.退出系统");
let no = parseInt(prompt("请选择"))
if (no == 1) {
console.log("执行添加学生");
} else if (no == 2) {
console.log("执行修改学生");
} else if (no == 3) {
console.log("执行查询学生");
} else if (no == 4) {
console.log("执行删除学生");
} else {
console.log("执行退出系统");
return;
}
//使用递归实现菜单方法
// menu() 如果外面函数名字改了,里面函数名没有修改,在运行时就会出现错误
//所以推荐使用argunments.callee .因为它始终指向自身
arguments.callee()
}
systemMenu()
let datas = [11, 22, 33, 44, 55, 66, 77, 88, 99, 111, 222, 333, 444, 555, 666, 777, 888, 999]
//每页4条数据,返回第三页数据
// let pageSize = 4
// let pageIndex = 3
// let ret = datas.slice((pageIndex - 1) * pageSize, pageIndex * pageSize)
// console.log(ret);
//进行包装 需要传3个参数:每页数量 ,当前页码 ,数组
function fun1(pageSize, pageIndex, arr) {
let ret = arr.slice((pageIndex - 1) * pageSize, pageIndex * pageSize)
return ret
}
let ret2 = fun1(2, 4, datas);
alert(ret2);
//在js中,如果a,b 那么a就是对象,b是对象的成员(属性或者方法)
//对象就是描述某个事物的具体:由一组属性 方法构成.
//在js中定义对象 有两种方式,1.直接定义 2.通过构造函数new
//此方法直接定义对象,对象由一对{}定义
let obj1 = {
name: "赵璐四",
age: 22,
sex: "女",
sayHi: function () {
//在对象的方法中,通过this关键字返回对象本身,所以可有使用this关键字调用对象的其成员
console.log(`大家好,我是 ${this.name}`);
},
study(time) {
console.log(`我每天学习${time}小时`);
}
}
obj1.sayHi()
obj1.study(10)
console.log("---------------------------------");
//2.定义构造函数:可以理解为类,构造函数的目的是定义对象的模板,方便创建多个相同类型对象
//构造函数就是函数 ,为了跟普通函数区别开,通常首字母大写
function Student(name, age, sex) {
//在构造函数内部:通过this给构造函数添加成员
this.name = name
this.age = age
this.sex = sex
this.sayHi = function () {
console.log(`大家好,我是 ${this.name}`);
}
this.study = function (time) {
console.log(`我每天学习${time}小时`);
}
}
//通过构造函数创建对象
let obj3 = new Student('杨幂', 35, '女')
obj3.sayHi()
obj3.study(5)
let obj4 = new Student('吴彦祖', 22, '男')
obj4.sayHi()
//this是方法中的一个关键字,该关键字始终指向方法的调用者
function fun1() {
console.log("全局函数");
//此时this指向window对象 ,是浏览器对象,就可以理解浏览器窗口
console.log(this);
}
//直接调用全局方法,本质就是 window.fun1()
//我们定义的全局成员(包括全局变量,全局方法)都会挂到全局对象window身上
var message = "好好学习"
console.log(window.message);
fun1() //这里省略了window. 本来是window.fun1
console.log("----------------------------");
let obj1 = {
name: "小明",
age: 22,
sayHi() {
console.log("你好", this);
}
}
let obj2 = {
name: "小红",
age: 22
}
//sayHi方法中this指向obj1,因为obj1 里方法
obj1.sayHi()
//给obj2添加一个方法叫sayHi,指向obj1的sayHi方法
obj2.sayHi = obj1.sayHi
//obj2本质上调用的是obj1的sayHi方法,当此时obj1的sayHi方法中的this执行obj2,
//因为obj2再.方法
obj2.sayHi()
var name = "小芳"
var age = 28
window.sayHi = obj1.sayHi
//方法中的this指向全局对象window
sayHi()
//给array类型添加一个myEvery方法
let arr = [11, 22, 33, 44, 55]
Array.prototype.myEvery = function (callBack) {
let count = 0
//this指向函数的调用者,谁再调用myEvery方法,this就指向谁
for (let i = 0; i < this.length; i++) {
if (callBack(this[i])) {
count++
}
}
if (count == arr.length) {
return true
} else {
return false
}
}
let ret2 = arr.myEvery(r => r > 20)
console.log(ret2);