什么是对象?
多个数据的封装体,用于保存多个数据的容器,一个对象代表现实中的一个事物。
例如:一个人,他有头,有眼睛,有鼻子,有手,有脚,有行为(走路),那么我们把这个人进行抽象到编程中,这个就叫做 “对象” 。
var person = {name:"juz", age:24, add:"shenzhen", gender: "boy",
xingwei:function(){
// 行为
}
}
console.log(person);
// 以上代码,将一个人进行抽象化,person代表一个人, 这个人有name, age, gebder, 以及行为方法,行为是一个函数
为什么要用对象?
统一管理多个属性
对象的组成(属性与方法):
对象的属性: 代表现实事物的状态数据,对象的属性是由属性名和属性值组成,本质上属性名和属性值都是字符串类型
对象的方法: 代表现实事物中的行为数据,一种特别的属性(它的属性值是函数)
var obj = {name:"zhangsan", tezheng : function(){函数执行体}}
// tezheng : 后面的函数就是对象的方法
如何访问对象内部的数据?
对象 . 属性名: 编码简单,但是有时不能用,例如:- , 空格 等其他特殊字符时
对象[“属性名”]: 当属性名包含特使字符: – 空格 变量名不确定时,才用 [“属性名”] 这种方法,优点是任何情况下都可以使用
var p = {
name:"tom",
age:23,
setName : function(new_name){
this.new_name = new_name;
console.log(this.new_name);
},
setAge : function(new_age){
this.new_age = new_age;
console.log(this.new_age);
}
};
p.setName("zhangsan"); //调用p.setName对象的方法
p.setAge(30); //调用p.setAge对象的方法
console.log(p.name);
console.log(p.age);
console.log(p.setName);
// 输出了函数的定义 ƒ (new_name){
this.new_name = new_name;
console.log(this.new_name);
}
对象的语法:
字面量对象:Var obj = {属性名:属性值,属性名:属性值,……};
构造对象:var obj = new Object(); obj . 属性名 = 属性值
.
.
什么是函数?
实现特点功能的n条语句的封装体,他可以反复被调用,只有函数是可以执行的其他类型的数据都是不可以执行的。
为什么要用函数 ?
可以提高代码复用,因为它可以反复被调用,便于阅读 ,它可以执行一整块功能的封装体,这个功能是其他数据类型所不具备的。
函数的实参与形参的本质
形参的本质就是个变量,还是个局部变量,而实参就是变量值
如何定义函数 (语法)
函数声明,函数表达式
// 函数声明
function fun(){
console.log("hello world");
}
// 函数表达式
var show = function(){
console.log("hello world")
}
如何调用执行函数?
test() :直接调用, obj.fun():通过对象调用, new fun():new调用, fun.call / apply (obj):可以让一个函数成为指定任意对象的方法,进行调用。
解释一下什么是: 可以让一个函数成为指定任意对象的方法,进行调用。
apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, arguments);即A对象应用B对象的方法
call:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.call(A, args1,args2);即A对象调用B对象的方法
var obj = {};
function fun(){
this.new_obj = "hello world";
}
fun.call(obj);
console.log(obj.new_obj);
// 输出结果为 : hello world
// 我们可以看到,本身 obj这个对象,是没有任何的属性值的,但是可以通过 .call 方法,把函数内的执行对象 .call 给对象,再通过对象进行调
回调函数
什么函数才是回调函数: 1,你定义的 2,你没有去调用它 3,但最终它在某个时刻或者条件执行了
常见的回调函数: DOM事件, 定时器回调函数, ajax 请求回调函数, 生命周期回调函数
document.getElementById("btn");
btn.onclick = function(){
alert("hello world"); //DOM事件,回调函数
}
setTimeout(function(){
alert("定时器回调函数"); // 定时器回调函数
},2000);
IIFE立即执行调用函数(匿名函数)
函数必须要有函数方法名,没用方法名的函数必须要是一个整体才能执行,所以要用括号括起来,这就是匿名函数(立即执行函数)
匿名函数的特点就是一次性执行函数,在匿名函数内部的变量都是局部变量,不会污染到外部的全局变量,而且匿名函数执行了一次,立即释放内存
(function(){
var a = 3;
console.log(a + 3);
})(); // 函数自调,调完即释放空间
this, 如何确定this的值:
谁来调用this,this的值就是谁,任何函数本质上都是通过某一个对象来调用的,如果没有直接指定就是 window
函数外的 this 就是 window,所有函数内部都有一个变量 this,它的值就是调用函数的当前对象