原型与原型链的简单理解-程序员宅基地

javascript的原型链有显式和隐式两种:

显式原型链:即我们常见的prototype;
隐式原型链:在一般环境下无法访问,即不可见,在FireFox下可以通过__proto__方式访问;隐式原型链用于javascript引擎内部对原型链的搜寻,通过显示原型链来设置;
 

一、prototype和__proto__的概念

  prototype是函数的一个属性(每个函数都有一个prototype属性),这个属性是一个指针,指向一个对象。它是显示修改对象的原型的属性。

  __proto__是一个对象拥有的内置属性(请注意:prototype是函数的内置属性,__proto__是对象的内置属性),是JS内部使用寻找原型链的属性。

      用chrome和FF都可以访问到对象的__proto__属性,IE不可以。

二、new 的过程
  
var Person = function(){};
var p = new Person();

   new的过程拆分成以下三步:
   (1) var p={}; 也就是说,初始化一个对象p
   (2) p.__proto__ = Person.prototype;
   (3) Person.call(p); 也就是说构造p,也可以称之为初始化p

关键在于第二步,我们来证明一下:

var Person = function(){};
var p = new Person();
alert(p.__proto__ === Person.prototype);

    这段代码会返回true。说明我们步骤2是正确的。

 

三、示例

复制代码
    var Person = function(){};
    Person.prototype.sayName = function() {
        alert("My Name is Jacky");
    };

    Person.prototype.age = 27;
    var p = new Person();
    p.sayName();
复制代码

p是一个引用指向Person的对象。我们在Person的原型上定义了一个sayName方法和age属性,当我们执行p.age时,会先在this的内部查找(也就是构造函数内部),如果没有找到然后再沿着原型链向上追溯。

这里的向上追溯是怎么向上的呢?这里就要使用__proto__属性来链接到原型(也就是Person.prototype)进行查找。最终在原型上找到了age属性。

转载于:https://www.cnblogs.com/shj-com/p/11165918.html

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

智能推荐

eNSP命令及组建简单局域网并使各PC连通(DHCP)_ensp 由pc1\pc2\pc3\pc4组建的局域网-程序员宅基地

文章浏览阅读1.1w次,点赞7次,收藏49次。eNSP的使用文章目录前言1、安装eNSP安装设置兼容性检测是否安装成功2、软件的使用设备介绍简单 局域网组建设备基础配置命令配置使用ping命令检测网络连通性DHCP服务 --动态主机配置协议PC通过DHCP获取ip地址,所有PC可相互访问前言**第二天学习,使用eNSP组建简单网络,使所有PC可以互相访问**1、安装eNSP安装使用eNSP前,需要以下按顺序安装exe文件最好按默认设置安装WinPcap_4_1_3Wireshark-win61-3.0.2Oracle._ensp 由pc1\pc2\pc3\pc4组建的局域网

C4D-造型工具笔记_c4d造型工具组的属性与运用-程序员宅基地

文章浏览阅读2.5k次。1、python生成器——不懂python语言,忽略(用语言来写图像形状)2、实例——新建物体,把物体拉到实例的参考对象栏,选中渲染实例,实例拉出来,形成两个物体,改动物体时,两个物体会同步改动。菜单栏运动图形中的实例,意思一样。3、连接——相当于打组。连接作为父级,物体作为子级,实现子级同步改变,用的比较少,需要单独调节物体时,可控性差。4、阵列——物体在阵列的子级能形成副本,可以修改副本的数量..._c4d造型工具组的属性与运用

百度云盘上传文件 提示服务器错误,百度网盘上传文件失败怎么办?百度网盘无法上传文件的解决办法...-程序员宅基地

文章浏览阅读6.6k次。百度网盘上传文件失败怎么办?相信很多伙伴都会为重要文件做一个网络备份,通常大家会选择上传到百度网盘中,然而有用户遇到百度网盘一直上传文件失败的情况,或者上传出现网络异常,碰到这样的情况该如何解决呢?别着急,下面小编给大家分享百度网盘无法上传文件的解决办法。百度网盘上传文件失败怎么办?1、先测一下自己的网络速度是多少,一般1M的网速,上行速度就是约100K,4M的网速,上行速度是400K,可以用36..._百度网盘怎么上传不了文件

python写一个聊天程序_python实现一个简单的网络聊天程序-程序员宅基地

文章浏览阅读194次。一、Linux Socket1.Linux Socke基本上就是BSD Socket(伯克利套接字)伯克利套接字的应用编程接口(API)是采用C语言的进程间通信的库,经常用在计算机网络间的通信。BSD Socket的应用编程接口已经是网络套接字的抽象标准。大多数其他程序语言使用一种相似的编程接口。由于伯克利套接字是第一个socket,大多数程序员很熟悉它们,所以大量系统把伯克利套接字作为其主要的网..._实现一个聊天服务的核心逻辑 python

Imdb影评的数据集介绍与下载_imdb数据集下载-程序员宅基地

文章浏览阅读1.7w次,点赞26次,收藏87次。1. Imdb影评的数据集介绍这是用于二进制情感分类的数据集,其包含的数据比以前的基准数据集要多得多。 我们提供了25,000套极地电影评论供培训,而25,000套则用于测试。 也有其他未标记的数据可供使用。 提供原始文本和已处理的单词格式袋。 有关更多详细信息,请参见发行版中的自述文件。Imdb 影评的数据集包含有25000 训练数据集25000 测试数据集2. 数据下载数据集地址:http://ai.stanford.edu/~amaas/data/sentiment/下载后解压,会看_imdb数据集下载

1053 住房空置率 (20分)-PAT乙级真题-C++实现_在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化-程序员宅基地

文章浏览阅读151次。1053 住房空置率 (20分)-PAT乙级真题-C++实现题目描述:在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断。判断方法如下:在观察期内,若存在超过一半的日子用电量低于某给定的阈值 e,则该住房为“可能空置”;若观察期超过某给定阈值 D 天,且满足上一个条件,则该住房为“空置”。现给定某居民区的住户用电量数据,请你统计“可能空置”的比率和“空置”比率,即以上两种状态的住房占居民区住房总套数的百分比。输入格式:输入第一行给出正整数 N(≤1000),为_在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化

随便推点

windows下tomcat输出控制台日志文件_tomcat start.up打开后不要关闭并显示日志-程序员宅基地

文章浏览阅读8.5k次,点赞3次,收藏12次。windows下tomcat输出控制台日志文件windows服务器情况下,无法和linux服务器一样,启动web服务之后,直接tail查看日志,而windwos控制台的输出空间有限,如果遇到大量错误的情况下,console日志刷新太快,无法看到首次错误是在哪里出现的,会产生很多不必要的麻烦,所以从网上查找了windows控制台信息输出到文件的方法,记录一下。_tomcat start.up打开后不要关闭并显示日志

seata源码解析:TM RM 客户端的初始化过程_seata timoutr-程序员宅基地

文章浏览阅读893次。TM和RM初始化过程上一篇文章说过,在Spring启动的过程中就会就会初始化TM和RM,建立与TC的长连接。TM,RM,TC都是用netty来处理网络连接的,初始化netty客户端和服务端的过程也非常类似。本篇文章只分析TM的初始化过程,RM和TM复用了很多方法// TmNettyRemotingClientpublic void init() { // registry processor // 注册消息处理器 registerProcessor(); if (i._seata timoutr

OBS 电脑推流直播指南_obs cqp-程序员宅基地

文章浏览阅读9.7k次。文章目录前言一、系统环境要求二、下载安装 OBS 软件二、设置 OBS1、分辨率配置2、编码输出设置3、推流设置4 保存配置四、 关闭电脑音频输入捕获五、 添加媒体来源五、 开始推流六、 预览实时直播七、常见问题1. 预览或者串流时遇到黑屏?2. 为什么 OBS 无法连接平台3. 怎么消除麦克风回音、噪音、杂音总结前言 OBS 是 Open Broadcaster Software 的简称,是一款免费且功能强大的 PC 端直播推流软件,支 持 windows/Linux/Mac OS 主流操作系统_obs cqp

Java后端代码混淆应用实践-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏4次。前言前端代码因为需要直接传输到客户端执行,因此代码混淆技术较早的开始发展,当前比较成熟。后端代码长期以来混淆的需求并不突出,然而随着Java代码需要被客户接触到,并不放在公司完全受控的环境,如以apk形式在用户手机上或以应用形式在专有云中,因此后端代码混淆提到了日程中。选型成熟的Java混淆工具很多,如下表:名称授权主页yGuar..._很显然proguard更加活跃。从混淆情况看,既然是混淆工具,混淆上差别不大,yguard基

Vue学习笔记之Webpack的plugin的应用_vue webpack-shell-plugin-程序员宅基地

文章浏览阅读374次。1、概念:插件,它是对webpack本身的扩展,是一个扩展器,让webpack变得更加好用。2、版权声明插件:BannerPlugin,但这个是webpack是自带的,所以可以不需要进行安装,在项目配置文件直接引用一下即可:const webpack = require(‘webpack’)然后重新打包项目,在生成的js文件中增加一行版权申明:3、打包HTML的插件:我们的目录结构中,index.html文件是在项目的根目录下的,在打包文件dist中是没有这个文件的,所以我们需要将ind_vue webpack-shell-plugin

区块链系统架构-程序员宅基地

文章浏览阅读1.7w次。区块链技术架构如图所示,包括核心技术组件、核心应用组件和配套设施3部分。其中,核心技术组件又包括通信层、存储层、安全机制层和共识机制层。1)核心技术组件① 通信:区块链通常采用点对点(peertopeer,P2P)技术来组织各个网络节点,每个节点通过多播实现路由、新节点识别和数据传播等功能。② 存储:区块链数据在运行期以块链式数据结构存储在内存中,最终会持久化存储到数据库中。对于较大的文件,也可存储在链外的文件系统里,同时将摘要(数字指纹)保存到链上用以自证。③ 安全机制:区块链系统通过多种密码学