function p () { this.name = 'x'; var name = 'y'; this.getName = function () { return name; } } // 求值 console.log(new p().getName()); getName方法里面返回name值,此时name值从作用域里面找,即var name = 'y';,返回y: 将getName方法里面的return name;改成return this.name;,这时会从this里面找属性为na…
什么是作用域链,什么是原型链. 作用域是针对变量的,比如我们创建了一个函数,函数里面又包含了一个函数,那么现在就有三个作用域 全局作用域==>函数1作用域==>函数2作用域 作用域的特点就是,先在自己的变量范围中查找,如果找不到,就会沿着作用域往上找. 如: var a = 1; function b(){ var a = 2; function c(){ var a = 3; console.log(a); } c(); } b(); 最后打印出来的是3,因为执行函数c()的时候它在自己的范…
1.原型链继承 2.constructor stealing(构造借用) 3.组合继承 js中的原型链继承,运用的js原型链中的__proto__. function Super(){ this.set = "set"; } Super.prototype.age = 10; function Sub(){ this.name = 100; } Sub.prototype = new Super(); var subs = new Sub(); console.log(subs.age…
现在校招也基本结束了,所以有时间把这段时间遇到的问题做个总结.在很多的笔试题目中,发现有很多对JS作用域方面的考察,所以查阅资料总结一下. 众所周知,js不像其他OOP语言那样,他是一种弱类型的语言,对数据类型没有很明显的区别.还有一点不同是它的作用域,引起这点不同主要是因为js的继承方式是通过原型链的方式来实现的. a)js没有块级作用域,所谓块级作用域即if,for,while(花括号括起来的部分)语句里面的部分.测试如下(Chrome浏览器). 下面为输出结果 从结果可以看出,js不存在块…
## 原型与原型链 * 所有函数都有一个特别的属性:   * `prototype` : 显式原型属性 * 所有实例对象都有一个特别的属性:   * `__proto__` : 隐式原型属性 * 显式原型与隐式原型的关系   * 函数的prototype: 定义函数时被自动赋值, 值默认为{}, 即用为原型对象   * 实例对象的__proto__: 在创建实例对象时被自动添加, 并赋值为构造函数的prototype值   * 原型对象即为当前实例对象的父对象 * 原型链   * 所有的实例对象…
以下是个人对这三个老大难的总结(最近一直在学习原生JS,翻了不少书,不少文档,虽然还是新手,但我会继续坚持走我自己的路) 原型链 所有对象都是基于Object.prototype,Object.prototype就是JavaScript的根对象,在Object.prototype中定义的方法都可以被其它对象访问到,当然也可以被重写了,所以直接在Object.prototype上调用的是原始功能的toString()方法,该方法会放回参数对象的内置属性[[class]]的值,这个值是个字符串,比如…
JS中原型链,说简单也简单. 首先明确: 函数(Function)才有prototype属性,对象(除Object)拥有__proto__. 首先,我画了一张图. 所谓原型链,指的就是图中的proto这一条指针链! 原型链的顶层就是Object.prototype,而这个对象的是没有原型对象的. 可在chrome的控制台里面输入: Object.__proto__ 输出是: function Empty() {} 原型链,如此而已. 对于新人来说,JavaScript的原型是一个很让人头疼的事情…
原型 原型是一个对象,每个函数对象(在javascript 之对象中说过函数也是对象 )都有一个属性(prototype)指向这个对象--原型对象,这个对象的作用是让所有对象实例共享原型对象中的属性.方法.即我们可以把公共的属性.方法写在这个原型中,所以说js中的继承是基于原型实现的: 构造函数.原型.实例 每个构造函数都有一个原型对象,原型对象包含一个指针指向构造函数,而实例包含一个指向原型对象的内部指针: function Person(name,age){ this.name=name;…
  对象的原型链 只要是对象就有原型 原型也是对象 只要是对象就有原型, 并且原型也是对象, 因此只要定义了一个对象, 那么就可以找到他的原型, 如此反复, 就可以构成一个对象的序列, 这个结构就被成为原型链 原型链到哪里是一个头? 一个默认的原型链结构是什么样子的? 原型链结构对已知语法结构有什么修正? 原型链的结构 原型链继承就是利用就是修改原型链结构( 增加.删除.修改节点中的成员 ), 从而让实例对象可以使用整个原型链中的所有成员( 属性和方法 ) 使用原型链继承必须满足属性搜索原则 属…
声明 本系列文章内容全部梳理自以下几个来源: <JavaScript权威指南> MDN web docs Github:smyhvae/web Github:goddyZhao/Translation/JavaScript 作为一个前端小白,入门跟着这几个来源学习,感谢作者的分享,在其基础上,通过自己的理解,梳理出的知识点,或许有遗漏,或许有些理解是错误的,如有发现,欢迎指点下. PS:梳理的内容以<JavaScript权威指南>这本书中的内容为主,因此接下去跟 JavaScrip…