javascript学习笔记(七)

方法

函数也可以成为对象的属性,如果一个函数作为一个对象的属性保存那么我们称这个函数时这个对象的方法
调用函数就说调用这个对象的方法(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方法在全局作用域中定义
在这里插入图片描述
在这里插入图片描述
但是这种方法不好,有很大的弊端,详细的内容,我们下次再说!

未完待续…

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值