作用域、debug、this、工厂方法批量创建对象、原型、tostring、垃圾回收

本文详细介绍了JavaScript中的作用域,包括全局作用域和函数作用域,强调了变量声明提前和作用域查找规则。此外,还讨论了debug调试技术,深入解析了this的关键概念。同时,探讨了如何利用工厂方法批量创建对象,以及原型和toString()方法的应用。最后,简述了JavaScript的垃圾回收机制,解释了对象何时会被视为垃圾并自动销毁。
摘要由CSDN通过智能技术生成

目录

1.作用域

1)全局作用域:

2)函数作用域

2.debug调试

3.this

4.使用工厂方法(批量)创建对象

5.原型prototype

6.toString()

7.垃圾回收


1.作用域

1)全局作用域:

编写在script标签中的JS代码;页面打开创建,关闭销毁
全局对象window-代表一个浏览器窗口,可直接使用
全局作用域中创建的变量都作为window对象的属性保存,函数-方法

全局作用域内的变量都是全局变量,在页面任意位置都可以访问

变量声明提前:使用var关键字在所有代码执行之前声明变量(但不会赋值undifined),反之不会
函数声明提前:使用函数声明function 函数名(){}的函数会在所有代码执行前被创建,所以可以在函数声明前调用函数
                        使用函数表达式var 函数名 = function(){};创建的函数不会被声明提前

2)函数作用域

调用函数创建,执行完毕后销毁;每调用一次创建一个作用域,相互独立

全局作用域中无法访问函数作用域的变量
在函数作用域中操作变量时,先找自身作用域,再找上一级作用域;
                                            一直找不到报错:ReferenceError,访问全局作用域中的变量用window对象

函数作用域中使用var关键字、函数声明也有声明提前特性
不使用var声明的变量会成为全局变量
定义形参相当于在函数中声明变量


2.debug调试

3.this

解析器在调用函数时每次都会向函数内部传递一个隐含参数this
指向一个对象(函数执行的上下文对象)

根据函数调用方法不同,this会指向不同对象

  1. 函数形式调用,this是window
  2. 方法调用,this是调用方法的那个对象
  3. 当以构造函数形式调用时,this就是创建的函数

     

4.使用工厂方法(批量)创建对象

function CreakPerson(){
var obj = new Object();
obj.name = name;
obj.age = age;
}
var obj1 = CreatPerson("Tom",18);
var obj2 = CreatPerson("Judy",12);

使用工厂方法创建对象,使用的构造函数都是Object,所以创建的对象都是Object类型
导致我们无法区分出多种类型的对象

创建一个构造函数,专门用来创建Person对象(习惯首字母大写)
构造函数就是一个普通函数,创建方式和普通函数没有区别
区别在于普通函数是直接调用,构造函数需要new关键字说明
function Person(形参){}
var per = new Person(实参);

将一个构造函数称为一个类
使用同一个构造函数创建的对象称为一类对象,一个称为该类的实例

使用instanceof可以检查一个对象是否是一个类的实例,返回布尔值
对象 instanceof 构造函数

所以对象都是Object的后代

构造函数的执行流程:

  1. 立刻创造一个对象
  2. 将新建的对象设置为函数中的this(this引用)
  3. 逐行执行函数中的代码
  4. 将新建立的对象作为返回值返回

     

5.原型prototype

在构造对象中添加一个方法,每执行一次就会创造一个新方法,浪费空间
将同一个方法挪到全局作用域里定义,污染全局作用域的命名空间且不安全

原型prototype
创造的每一个函数都会被解析器添加的属性(每个函数不同)
属性对应一个对象,即为原型对象(prototype)
调用普通函数时,它没作用
调用构造函数时,构造函数创造的对象(实例)中也会有隐含属性指向它,通过__proto__访问
可以将对象中共有的内容(属性/方法)逐一设置到原型对象中

访问对象的一个属性/方法时,先到对象找,再到原型对象里找,最后到原型的原型中找
直到找到Object的原型,它没有原型会返回undefined(null),一般找两次

使用in检查对象中是否含有某属性时,即使这个属性在原型中也会返回true
为避免这情况,用hasOwnProperty("属性名")方法
hasOwnProperty在原型对象的原型对象里


6.toString()

当我们在页面中打印一个对象时,输出的时对象的toString()方法的返回值
toString()在原型的原型里
如果不希望输出对象时输出[object object]可以为对象添加一个toSting()方法
全部修改输出对象则修改原型中的toString()


7.垃圾回收

程序垃圾过多会导致程序运行速度过慢,所以需要垃圾回收机制
当一个对象没有变量引用,就称这个对象是垃圾

var obj = new Object;
obj = null; //表示此对象是垃圾

JS自带自动垃圾回收机制,会将此类对象自动销毁

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值