js中原型和闭包的理解

版权声明:本文为博主原创文章,未经博主允许不得转载!!! https://blog.csdn.net/qq_19107011/article/details/79720904

原型

javascript中有对象。
还有一种特殊的对象,叫方法
这里js需要解决一个数据共享的问题。
作为方法,需要提供一个空间来存放共享的数据,给通过该方法生成的对象使用。
所以有

var Fn = function(){};
Fn.propertype.age=12;

这里的propertype就是放置共享数据的空间。
然后通过该方法生成对象。
var fn = new Fn();
对于对象,需要拿到方法的共享数据,这里proto属性就是刚才方法共享数据空间的地址,所以对象此时如果自己没有定义属性的话,就会借助proto属性,定位到生成该对象的方法的共享属性空间拿到共享属性。
这个公式说明就是
Fn.propertype = fn.__proto__
所以:
alert(fn.age);
小总结:
方法需要提供一个propertype地址当成共享空间,放置共享数据。
实例对象需要通过proto属性访问共享的数据。

深入一点说明,这个共享空间的地址结构是什么样呢。
先说明,这个共享的空间是一个对象。

一般有2部分组成

  1. 自定义属性,比如age这些
  2. constructor属性指向方法
  3. proto属性
这个共享空间是一个对象,它也有__proto__属性,这个指向Function的共享空间,Function共享空间的__proto__属性指向Function的共享空间,形成一个环形。

如下图:
原型的理解

更详细可以点击这里

闭包

如果了解闭包,就需要明白变量的作用域
闭包可以把是外部作用域访问方法内部作用域的桥梁
可以包变量保持在内存中

当函数名后加上括号时,通常会执行函数体本身。如果函数有返回值时,此时会得到函数的返回值;
当函数名后不加括号时,其实质上是一个函数指针,只是用于找到函数体的位置,不会直接执行函数体;

参考博客

深入理解javascript原型和闭包(完结)
JavaScript中函数作为参数进行传递时的括号问题

猜你喜欢

转载自blog.csdn.net/qq_19107011/article/details/79720904