JavaScript原型,原型链, 内存图

版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_44721831/article/details/102605230

JavaScript原型,原型链 ? 有什么特点?

每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,于是就这样一直找下去,也就是我们平时所说的原型链的概念。

关系: instance.constructor.prototype = instance. _ proto _

特点: JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变。

当我们需要一个属性的时,Javascript引擎会先看当前对象中是否有这个属性, 如果没有的话,就会查找他的Prototype对象是否有这个属性,如此递推下去,一直检索到 Object 内建对象。

			function Func(){}
			Func.prototype.name = "Sean";
			Func.prototype.getInfo = function() {
			  return this.name;
			}
			var person = new Func();//现在可以参考var person = Object.create(oldObject);
			console.log(person.getInfo());//它拥有了Func的属性和方法
			//"Sean"
			console.log(Func.prototype);
			// Func { name="Sean", getInfo=function()}

Javascript作用链域?

全局函数无法查看局部函数的内部细节,但局部函数可以查看其上层的函数细节,直至全局细节。当需要从局部函数查找某一属性或方法时,如果当前作用域没有找到,就会上溯到上层作用域查找,直至全局函数,这种组织形式就是作用域链。

JavaScript有几种类型的值?,你能画一下他们的内存图吗?

栈: 原始数据类型(Undefined,Null,Boolean,Number、String)
堆: 引用数据类型(对象、数组和函数)

两种类型的区别是:存储位置不同;

  • 原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储;
  • 引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定。如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体


参考阅读:

  1. 作用域链
  2. 执行环境(EC)和作用域链
  3. 生成作用域链
  4. Object.prototype
  5. 构造函数Function
  6. JS 原型与原型链 (一)
  7. JS 原型与原型链 (二)
  8. JS 原型与原型链 (三)
  9. JS 原型与原型链 (四)

猜你喜欢

转载自blog.csdn.net/qq_44721831/article/details/102605230