JavaScript原型链与作用域链

layout: ‘page‘
title: ‘原型链与作用域链‘
date: 2019-09-30 15:38:38
tags: JAVASCRIPT
categories: JAVASCRIPT

原型

  • 所有函数自带一个属性:prototype,属性值是一个对象,存储供实例调用的公共方法
  • 这个对象自带属性constructor,属性值是函数本身
  • 每个对象自带_ _proto__的属性,这个属性指向当前实例所属类的prototype(如果不能确定他是谁的实例,都是Object的实例)

原型链

如果当前对象没有这个属性,会向它_ _proto__这个属性指向的所属类上的prototype上查找,如果也没有,会向所属类上的prototype上的proto上查找...一直找到Object为止。

作用域链

  • 如果当前作用域中没有这个私有变量,会向上级作用域查找,一直找到window为止,如果window也没有,则把变量添加到window属性中。
  • 函数的上级作用域只和他在哪里创建的有关

原文地址:https://www.cnblogs.com/wangshouren/p/11615810.html

时间: 2024-10-10 06:56:52

JavaScript原型链与作用域链的相关文章

关于JS的原型链和作用域链

最近在看<Javascript高级程序设计第三版>,用了两周把前七章磕磕绊绊的读完了,也阅读了许多大牛们写的博客,对JS的理解有了很大的提高,不过要将这么多的知识全部融会贯通还有还需要多多练习,加深自己的理解,今天就将自己迷糊的几个地方列出来写写自己的理解,新手小白,如有错误欢迎大家指正(: 1.原型链和作用域链的概念模糊 这个问题可能有人觉得很无厘头,不过确实在我学习过程中突然出现而且让我产生很大的困扰,觉得是不是之前自己的理解就出现很大的问题.出现这个问题的原因是第七章函数表达式,原先在单

JavaScript高级程序设计之作用域链

JavaScript只有函数作用域:每个函数都有个作用域链直达window对象. 变量的查找由内而外层层查找,找到即止. 同时不仅可以查找使用,甚至可以改变外部变量. var color = "blue"; function changeColor() { var anotherColor = "red"; function swapColors() { var tempColor = anotherColor; anotherColor = color; colo

Javascript执行环境、作用域链

一.执行环境 执行环境(也叫做执行上下文,Execution Context)是Javascript中最为重要的一个概念.执行环境定义了变量或函数有权访问其他数据,决定了它们各自的行为.每个执行环境都有一个与之关联的变量对象,执行环境中定义的所有变量和函数都保存在这个对象中.虽然我们编写的代码无法访问这个对象,但解析器在处理时会在后台使用它. 全局执行环境是最外围的一个执行环境.根据ECMAScript实现所在的宿主环境不同,表示执行环境的对象也不一样.在web浏览器中,全局执行环境被认为是wi

原型链和作用域链

一.原型链: 1.原型对象: 每一个构造函数都有一个prototype属性,这个属性就叫原型对象. 每一个构造函数new出来的对象都有一个--proto--属性,这个属性指向原型对象. <script> function Car(){ //实例属性: //this.produce = 'chevrolet', this.price = 8800000; } //原型属性: Car.prototype.produce = "BMW"; var chevrolet = new

关于原型链和作用域链的终点问题

1 <script language="javascript" type="text/javascript"> 2 function A(){ 3 this.a=11; 4 this.getA=function(){ 5 return this.a; 6 } 7 } 8 A.prototype.b=33; 9 Object.prototype.b=22; 10 var k=new A() 11 alert(k.b);//33; 12 </scrip

1、JavaScript高级之函数作用域链

作用域链: JavaScript的每个函数function都有自己的作用域,使用Active Object(简称AO)活动对象来保存,在相互嵌套的函数中形成了作用域链,如图: 作用域链就是从里到外的AO链 变量的寻找: 函数fn3中使用的变量,如在fn3作用域内寻找不到,则往外层fn2作用域寻找,以此类推,直到全局对象window 代码演示: var c = 5; function t1(){ var d = 6; function t2(){ var e = 7; var d = 3;//如果

JavaScript基础概念之----作用域链

也称:词法作用域 JavaScript查找变量关联的值时,会遵循一个查找链,这个链是基于作用域的层次结构的. var a = 'hello'; var func1 = function(){ var func2 = function(){ console.log(a); } } //hello 如上图,查找过程如下: 1.在func2函数中查找变量a,如果找到了,直接输出值,如果没有找到,转到第2步 2.在func2的父函数 func1函数中继续查找,如果找到了,直接输出值,如果没有找到,转到第

2. 原型链_作用域链_预处理_预解析

1. 谈谈原型 能够实现继承,对象查找属性的规则 实例对象的隐式原型的值 为其 对应构造函数的 显式原型的值 prototype 显示原型属性 所有函数都有显示原型属性 __proto__ 隐式原型属性 所有实例对象都有隐式原型属性 所有函数都是 Function 的实例 Function 是通过 new 自己产生的实例 2. 谈谈原型 由多个隐式原型属性构成的链状结构就是原型链 作用: 用来查找对象的 属性/方法 先自身找,找不到再去 __proto__ 找,最终找到 Object.proto

原型及原型链及作用域链

原型:所有的函数都有一个特殊的属性prototype(原型),prototype属性是一个指针,指向的是一个对象(原型对象),原型对象中的方法和属性都可以被函数的实例所共享.所谓的函数实例是指以函数作为构造函数创建的对象,这些对象实例都可以共享构造函数的原型的方法. 原型链:原型链是用于查找引用类型(对象)的属性,查找属性会沿着原型链依次进行,如果找到该属性会停止搜索并做相应的操作,否则将会沿着原型链依次查找直到结尾.常见的应用是用在创建对象和继承中. 例子: 解析: 函数Person中有一个原