this在js中表示当前行为执行的主体
this在js中不是函数独有的,但是我们主要研究的是函数中的this
-
在事件处理函数中(将函数当做值赋值给某个事件)this是当前触发的那个元素
-
在函数外,this指向window
在函数内,this指向调用者
var oLis = document.getElementsByTagName("li");
for (var i = 0; i < oLis.length; i++) {
// 给当前这个li绑定事件
oLis[i].onclick = function () {
console.log(this);//触发那个元素
console.log(this.innerHTML);
}
}
2.自定义属性
js中一切皆对象
元素天生自带很多属性 , 原来没有的属性我们去增加就是自定义属性;
设置
-
对象.属性 = 值;
获取
-
对象.属性;
// 自定义属性的方式
// 点击当前这个li先变为蓝色 再次点击变为绿色 (依次类推)
var oLis = document.getElementsByTagName("li");
for(var i = 0;i<oLis.length;i++){
// 自定义属性
oLis[i].flag = true;
oLis[i].onclick = function(){
// 判断 (当前这个li上自定义属性的值)
if(this.flag){//true
this.style.backgroundColor = "blue";
// 给自定义属性重新赋值
this.flag =false;
}else{
this.style.backgroundColor = "green";
// 给自定义属性重新赋值
this.flag =true;
}
}
}
// 获取元素
var oLis = document.getElementsByTagName("li");
for(var i = 0;i<oLis.length;i++){
// 自定义索引
oLis[i].index = i;
oLis[i].onclick =function(){
console.dir(this);
alert(this.index);
}
}
练习
选项卡
// 获取元素
var tab = document.getElementById("tab"),
oLis = tab.getElementsByTagName("li"),
oDivs = tab.getElementsByTagName("div");
console.log(oLis, oDivs);
// 点击当前li,先让所有的li和div没有激活样式,然后再让当前这个li和对应的那个div有激活样式
// 绑定事件
for (var i = 0; i < oLis.length; i++) {
// 自定义索引
oLis[i].index = i;
// 给当前那个li绑定事件
oLis[i].onmouseover = function () {
// 先让所有的li和div没有激活样式 将active类名清空
for (var j = 0; j < oLis.length; j++) {
oLis[j].className = "";
oDivs[j].className = "";
}
// 然后再让当前这个(点击的那个)li和对应的那个div有激活样式
console.log(this.index);
this.className = "active";
oDivs[this.index].className = "active";
}
}
qq列表
// 获取元素
var list = document.getElementById("list"),
oPs = list.getElementsByTagName("p"),
oImgs = list.getElementsByTagName("img"),
oUls = list.getElementsByTagName("ul");
console.log(oPs, oImgs, oUls);
// 绑定事件
for (var i = 0; i < oPs.length; i++) {
// 给当前这个p标签绑定事件
// 自定义属性
oPs[i].flag = true; //默认收起
// 自定义索引
oPs[i].index = i;
// 绑定事件
oPs[i].onclick = function () {
console.dir(this);
// 判断
if (this.flag) { //展开
// 让当前这个p标签对应的那个ul显示
oUls[this.index].style.display = "block";
// 修改自定义属性的值
this.flag = false;
} else {
// 让当前这个p标签对应的那个ul隐藏
oUls[this.index].style.display = "none";
// 修改自定义属性的值
this.flag = true;
}
}
}
3.函数的声明及调用
在js中函数就是具有特定功能的代码段,可以分为两部分 声明 + 调用
声明一个函数可以调用无数次(每次调用都是相互独立的)
函数名表示当前函数本身
//语法 function关键字声明 (实名函数->有名字的函数):定义顺序与调用顺序无关
function 函数名(){
函数体;
}
//语法2 表达式声明(将一个匿名函数赋值给某个变量) :只能先定义,再调用**
var fn=function(){
函数体;
};
4.函数的简单使用
// 求1-100的和
function sum(){
var total = 0;
for(var i = 1;i<101;i++){
total+= i;
}
console.log(total);
}
sum();
5.函数的参数
当函数定义时,可以在函数的()位置声明参数
-
形参 函数定义时的参数
-
实参 函数调用时的参数
理论上函数可以有无限多个参数,多个参数之间使用逗号隔开
函数的参数可以是任意的数据类型,例如:string、number、boolean、对象类型、函数等....
function 函数名(形参1,形参2,
注意:若函数调用时,未传递实参,则形参的值为:undefined
6.函数的arguments
arguments是函数独有的 (实参的一个类数组集合)
// 求任意数字之和
function sum2() {
var total = 0;
// 将arguments集合中的每一项取出来相加
for(var i = 0;i<arguments.length;i++){
// console.log(arguments[i]);
total += arguments[i];
}
console.log(total);
}
sum2(100, 200, 300, 10, 20, 30, 50);
sum2(100, 200, 300, 10, 20, 30, 50, 200, 300, 1000);
sum2(100, 200, 300);
sum2(100, 200);
arguments注意问题
形参与函数内定义的变量一样时,会导致此形参等于此变量
function test2(a, b) {
// arguments这个集合 和 a,b是一一对应的 (一个改变另一个也改变)
console.log(arguments);
console.log(arguments[0]);
// 修改实参的值
// 利用arguments修改了实参的值 形参的值也就变了
arguments[0] = "哈哈";
console.log(a);
var b = "你好啊"; //变量b将形参b的值覆盖了
console.log(b); //你好啊
console.log(arguments[1]); //你好啊
}
test2(100, 200);
函数注意问题
-
函数的重复命名 ,后边的覆盖前边的
-
函数的参数个数
-
实参个数等于形参个数 一一对应进行赋值
-
实参个数小于形参个数 一一对应进行赋值,没有赋值的形参默认值是undefined
-
实参个数大于形参个数 一一对应进行赋值,超出实参没影响(没有形参接收)
-
-
参数类型
-
函数的实参可以任意数据类型
-
-
函数中的this (this表示当前行为执行的主体)
-
在事件处理函数中this是触发的那个元素
-
函数调用就看前边有没有点,没有点this就是window,有点点前面是谁就是谁
-
浙公网安备 33010602011771号