JS(JavaScript)的进一步了解3(更新中···)
程序员文章站
2022-04-04 15:07:43
数据的三种存储方式 所有编程语言java c python c++ 等 他们都是面向对象编程,面向对象必须有三大特点,封装,继承,多态. 今天就是研究JS如何生成对象。 Js一开始就是写网页特效,面向过程的,作者发现这样写不好,代码重复利用率太高,计算机内存消耗太大,网页性能很差。 所以作者就收到j ......
数据的三种存储方式
- string “ ”
- array [ ]
- json { }
所有编程语言java c python c++ 等 他们都是面向对象编程,面向对象必须有三大特点,封装,继承,多态.
今天就是研究js如何生成对象。
- 面向对象
js一开始就是写网页特效,面向过程的,作者发现这样写不好,代码重复利用率太高,计算机内存消耗太大,网页性能很差。
所以作者就收到java和c的影响,往面向对象靠齐。js天生有一个object,但他没有面向对象的特征(封装,继承,多态)。
最后研究出了构造函数。
构造函数最终目的是生成对象。
我们把封装的那个函数叫 类
类里面的属性是私有的。
类原型上的属性是公有的,可继承的
1)类身上天生自带一个prototype的属性,属性是对象
2)prototype对象天生有一个constructor属性,属性值就是类本身
3)实例天生有一个__proto__ 指向你自己类的原型
原型链主要针对对象的属性来说的
作用域链主要针对变量来说的
var a和a的区别
没有带var的变量就不能存放到内存地址中。就没有变量提升这种说法了。相当于给window加了一个属性window.a。
带var 可以存放在内存地址中,有变量提升,同时也相当于给window加了一个属性window.a
函数:
函数在调用的时候,会形成一个私有作用域,内部的变量不会被外面访问,这种保护机制叫闭包。这就意味着函数调用完
毕,这个函数形成的栈内存会被销毁。
但有时候我们不希望他被销毁。
函数归属谁跟它在哪调用没有关系,跟在哪定义有关。
fn()调用完毕后得到的是一个匿名函数,但是这个函数在fn这个作用域下定义的,所以这个匿名函数内部的变量在fn作用域
下查找。这种写法可以使函数内部的变量不被销毁。