九、预解析
9.1预解析概念
JavaScript代码是由浏览器中的JavaScript解析器来执行的。JavaScript 解析器在运行JavaScript代码的时候分为两步 : 预解析 和 代码执行。
预解析: js 引擎会把 js 里面所有的var 还有function 提升到当前作用域的最前面
9.2、预解析分类
1.变量预解析(变量提升)
变量提升就是把所有的变量声明提升到当前的作用域最前面不提升赋值操作。
2.函数与解析(函数提升)
函数表达式调用必须写在函数表达式的下面
十、自定义对象
10.1、什么是对象
现实生活中:万物皆对象,对象是一个具体的事物 ,看得见摸得着的实物。例如,一-本书、一辆汽车、 一个人可以是“对象”,一个数据库、一张网页、一个与远程服务器的连接也可以是“对象”。
在JavaScript中, 对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。
对象是由属性和方法组成的。
● 属性: 事物的特征,在对象中用属性来表示(常用名词)
● 方法: 事物的行为,在对象中用方法来表示(常用动词)
10.2、为什么需要对像
JS中的对象表达结构更清晰,更强大。
10.3、创建对象
(1)利用字面量创建对象
对象字面量:就是花括号 {} 里面包含了表达这个具体事物(对象)的属性和方法。
语法:
var obj= {
uname : ‘ 张三疯' ,
age: ‘18’ ,
sex: '男' ,
sayHi: function () {
console.1og('hi~' );
}
}
注意:
(1) 里面的属性或者方法我们采取键值对的形式( 键(属性名);值(属性值 ) 。
(2) 多个属性或者方法中间用逗号隔开的。
(3)方法冒号后面跟的是一个匿名函数。
(2)new Object 创建对象
var obj = new **O**bject(); //创建了一个空的对象
obj.uname = ' 张三疯 ';
obj.age = ' 18 ' ;
obj.sex = ' 男 ' ;
obj.sayHi = function() {
}
注意:
(1) 我们是利用等号=赋值的方法添加对象的属性和方法
(2) 每个属性和方法之间用分号结束,
(3)使用前两种方式创建的对象
(1)调用对象属性
● 调用对象的属性 采取 对象名.属性名 。 . 我们理解为的
console . log ( obj . uname );
● 调用属性还有一种方法对象名["属性名’]
console .log( obj[‘age’] );
(2)调用对象方法
调用对象的方法 对象名.方法名 记得带括号
obj. sayHi();
10.4、利用构造函数创建对象
因为我们一次创建一个对象,里面很多的属性和方法是大量相同的我们只能复制。
因此我们可以利用函数的方法重复这些相同的代码我们就把这个函数称为构造函数。
又因为这个函数不一样,里面封装的不是普通代码,而是对象。
就是把我们对象里面一些相同的属性和方法抽象出来封装到函数里面。
语法格式:
function构造函数名() {
this.属性 = 值;
this.方法= function() {}
}
构造函数名字首字母要大写(统一规范)
注意:
(1)构造函数名字首字母要大写。
(2)我们构造函数不需要return就可以返回结果。
(3)我们调用构造函数必须使用new 。
(4)我们只要new Star()调用函数就创建一个对象。
(5)我们的属性和方法前面必须添加this。
调用对象:
new构造函数 名();
例:
// new 构造函数名();
function Star (uname, age, sex) {
this. name = uname ;
this.age = age;
this.sex = sex;
}
new Star( ‘刘德华', ’18’, '男’);
10.5、构造函数和对象的关系
● 构造函数,如Stars() ,抽象了对象的公共部分,封装到了函数里面,它泛指某一大类 ( class )。
● 创建对象,如new Stars0 ,特指某一个,通过new关键字创建对象的过程我们也称为对象实例化。
10.6、new关键字
(1)new构造函数可以在内存中创建了一个空的对象
(2)this就会指向刚才创建的空对象
(3)执行构造函数里面的代码给这个空对象添加属性和方法
(4)返回这个对象
10.7、变量 属性 函数 方法 总结
(1)变量和属性的异同
变量单独声明并赋值使用的时候 直接写变量名
变量单独声明并赋值使用的时候 直接写变量名
属性在对象里面的不需要声明,使用的时候必须是 对象.属性
(2)函数和方法的异同
函数和方法的相同点都是实现某种功能做某件事
函数是单独声明并且调用的 函数名() 单独存在的
方法在对象里面 调用的时候 对象.方法()
10.8、遍历对象属性
fr…in语句用于对数组或者对象的属性进行循环操作。
语法:
for(变量 in 对象){
}
例如:
for( var k in obj ){
console.log(k); // k 变量 输出 得到的是 属性名
Console.log( obj [k] ); // obj [k] 得到的是 属性值
}