javascript 原型链、作用域链的理解

一、原型链

原型链主要是通过 __proto__和prototype两个属性来实现的。(注:由于__proto__是私有属性,很多浏览器都没有开放,以下都是在谷歌浏览器中实现的

1、“类”的__proto__等于其父类的prototype

  例:

var foo=function(){};
alert(foo.__proto__==Function.prototype)  //返回true

2、“类”实例的__proto__等于该“类”的prototype

  例:

var foo=function(){};
var f=new foo();
alert(f.__proto__==foo.prototype)  //返回true

 

3、“类”的Prototype是一个独立的对象。该对象默认是一个Object对象的实例,所以“类”的prototype属性的__proto__属性的值默认等于Object.prototype

  例:

var foo=function(){};
alert(foo.prototype.__proto__==Object.prototype)  //返回true

 

4、因为在JS中Object其实也是Function,所以alert(Object.__proto__==Function.prototype);返回true

 

5、特殊情况

  Object.prototype.__proto__==null//为了防止原型链无限循环的发生

  由此可得:Function.prototype.__proto__.__proto__==null

 

以上关系可以通过下图来表示:

 

小结:__proto__存在的作用——当调用一个“类”实例的某个属性/方法,如果这个属性/方法在当前“类”中未定义(也就是在“类”实例本身没有找到)则会在__proto__中去查找这个属性/方法,如果__proto__中不存在这个属性/方法,继续搜索__proto__.__proto__中去查找,直到找到这个属性/方法或者__proto__等于null时。

 

二、作用域链

待续....

 

 

以上个人学习经验总结,如有不对的地方烦请指教,谢谢。

原文地址:https://www.cnblogs.com/lxiang

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)