面向对象前序
1.作用域
栈内存:js执行的环境(作用域)
堆内存:存放代码的空间,存放方式一种键值对的形式存放,函数以字符串的形式存放
2.js在执行之前,浏览器会给他一个全局作用域window,每个作用域下分两个模块,一个是内存模块,一个是执行模块,内存模块会给所有的变量一个内存地址,变量的声明,在js中靠关键字var和function
js在执行之前浏览器会给他一个全局作用域叫window;在window下分两个模块,一个是内存,一个是执行,内存会找到所有的关键字var和function 对变量进行提前声明(这种功能叫变量提升),给每个变量分配内存地址,在执行模块遇到变量首先会在自己的作用域下通过内存地址去查找这个变量是否存在,如果有直接操作,没有向他的上一级作用域的内存模块查找,如果有,就直接操作,没有继续向上查找,直到window,这种查找机制叫作用域链;
预解释(变量提升)
变量命名冲突?
如果普通变量和函数变量命名相同,最终只保留函数变量
3.=赋值运算
1.赋值运算,就是把后面的数据赋值给等号前面的变量
后面的数据分两种
1.后面的简单的基本数据类型:number string Boolean null undefined直接就是将数据赋给前面的变量
2.如果后面的复合数据类型:array object function 将内存地址赋值给变量
4.object和json二者的区别?
1.长的一样 以键值对的形式书写
但是object的键(key)可以不加引号,但是json的键(key)必须加引号
object={name:"张三"}(可以不加引号) 前台的数据类型
json={"name","张三"}(必须加引号) 后台存放数据格式
功能不一样:
object是前端的数据类型;
json是数据库存放的数据格式;
5.object对象
1.对象的定义:
1.字面量定义 var obj={name:"张三"}
2.类的实例 var obj=new Object()
obj.name="张三"
类:抽象东西:生成实例模型;
类的阶梯;
自定义类的本质是函数
类和实例的关系
1.每个类(函数)都有一个prototype的属性,这个属性是一个对象,里面有一个constructor的属性,属性值就是这个类
2.每个实列(对象)都有一个__proto__的属性,这个属性也是一个对象,它指向当前类的原型
prototype和__proto__?
二者都叫原型
区别:
1.存放属性的对象
2.__proto__是查找属性的
prototype给开发者使用;
__proto__给浏览器使用