方法
函数也可以成为对象的属性,如果一个函数作为一个对象的属性保存那么我们称这个函数时这个对象的方法
调用函数就说调用这个对象的方法(method)
这里sayname就是obj的方法,调用sayname的时候我们就说调用obj的sayname方法
这里是调函数
调函数和调方法这里只是名称上的区分,没有本质的差别
枚举对象中的属性,使用for…in语句
语法:
for(var 变量 in 对象){
}
for…in语句对象中有几个属性,循环体就会执行几次
每次执行时,会将对象中的一个属性的名字赋值给变量
如果我们想输出这些属性的内容呢
全局作用域
作用域:
作用域指一个变量的作用的范围-在JS中一共有两种作用域:
1.全局作用域
直接编写在script标签中的JS代码,都在全局作用域
全局作用域在页面打开时创建,在页面关闭时销毁
在全局作用域中有一个全局对象window
它代表的是一个浏览器的窗口,它由浏览器创建我们可以直接使用
在全局作用域中,创建的变量都会作为window对象的属性保存
这里a虽然是一个变量,但它也是作为window对象的一个属性保存的
既然这样那么函数也能成为window的方法,那么试试看能不能调用window的一个方法
在全局作用域中。
创建的变量都会作为window对象的属性保存
创建的函数都会作为window对象的方法保存
变量的声明提前
使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会赋值)
但是如果声明变量时不适用var关键字,则变量不会被声明提前
如果去掉var
函数的声明提前
使用函数声明形式创建的函数function 函数() {
}
它会在所有的代码执行之前就被创建
使用函数表达式创建的函数,不会被声明提前,所以不能在声明前调用
全局作用域中的变量都是全局变量,在页面的任意的部分都可以访问的到
2.函数作用域
调用函数时创建函数作用域,函数执行完毕以后,函数作用域销毁
每调用一次函数就会创建一个新的函数作用域,他们之间是互相独立的
在函数作用域中可以访问到全局作用域的变量
在全局作用域中无法访间到函数作用域的变量
当在函数作用域操作一个变量时,它会先在自身作用域中寻找,如果有就直接使用,如果没有则向上一级作用域中寻找
我们把里面的变量注释掉
如果全局作用域中依然没有找到,则会报错
在函数中要访问全局变量可以使用window对象
在函数作用域也有声明提前的特性,
使用var关键字声明的变量,会在函数中所有的代码执行之前被声明
函数声明也会在函数中所有的代码执行之前执行
在函数中,不适用var声明的变量都会成为全局变量,变量会在全局输出
定义形参就相当于在函数作用域中声明了变量
这里只是没有给实参赋值
debug
对它进行下断点监视每一个语句的执行情况,具体操作不详细演示了
this
解析器在调用函数每次都会向函数内部传递进一个隐含的参数
这个隐含的参数就是this,this指向的是一个对象
这个对象我们称为函数执行的上下文对象
根据函数的调用方式的不同,this会指向不同的对象
调fun的时候是window
1.以函数的形式调用时,this永远都是window
2.以方法的形式调用时,this就是调用方法的那个对象
使用工厂方法创建对象
但是这样就把它写死了,我们需要他们输出我们想要的
这里还没传实参,我们来传一下试试
构造函数
使用工厂方法创建的对象,使用的构造函数都是Object,所以创建的对象都是Object这个类型,就导致我们无法区分出多种不同类型的对象|
创建一个构造函数,专门用来创建Person对象的
构造函数就是一个普通的函数,创建方式和普通函数没有区别
构造函数的执行流程:
1.立刻创建一个新的对象
2.将新建的对象设置为函数中this,在构造函数中可以使用this来引用新建的对象
3.逐行执行函数中的代码
4.将新建的对象作为返回值返回
使用同一个构造函数创建的对象,我们称为一类对象,也将一个构造函数称为一个类
我们将通过一个构造函数创建的对象,称为是该类的实例
使用instanceof可以检查一个对象是否是一个类的实例
语法:
对象 instanceof 构造函数
所有的对象都是Object的后代,
所以任何对象和Object左instanceof检查时都会返回true
创建一个Person构造函数
在Person构造函数中,为每一个对象都添加了一个sayName方法,
目前我们的方法是在构造函数内部创建的,
也就是构造函数每执行一次就会创建一个新的sayName方法也是所有实例的sayName都是唯一的
这样就导致了构造函数执行一次就会创建一个新的方法,
执行10000次就会创建10000个新的方法,而10000个方法都是一模一样的
这是完全没有必要,完全可以使所有的对象共享同一个方法
将sayName方法在全局作用域中定义
但是这种方法不好,有很大的弊端,详细的内容,我们下次再说!
未完待续…