js原型和原型链

我们要理解js的原型,首先需要知道5条js原型规则:

1.js引用类型(function ,array ,object)都可以任意扩展自己的属性。

 1 function fn(){
 2 
 3 }
 4 fn.age=10;
 5 console.log(fn.age);//10
 6 
 7 var arr=[1,2,3];
 8 arr.name='keke';
 9 console.log(arr);//[1,2,3,name:"keke"]
10 
11 var obj={
12     age:20;
13 }
14 obj.name='xixi';
15 console.log(obj);//{age:20,name:'xixi'}

 

 

2.所有的引用类型都有一个__proto__属性,这个属性值是一个普通对象。

1 var arr=[];
2 console.log(arr.__proto__);
3 var obj={};
4 console.log(obj.__proto__);
5 var fn=function(){};
6 console.log(fn.__proto__);

 

3.所有函数都有一个prototype属性,这个属性值也是一个普通对象

1 var fn=function(){};
2 console.log(fn.prototype);


4.一个对象的__proto__属性值指向这个对象的构造函数的prototype的属性值

1 function Animal(name,age){
2     this.name=name;
3     this.age=age;
4 }
5 var cat=new Animal('heihei',13);
6 console.log(cat.__proto__===Animal.prototype);//true

 

5.当查找一个对象的属性时,若在对象本身找不到,可以去它的__proto__(即它的构造函数的prototype)上去找。

 1 function Animal(name,age){
 2     this.name=name;
 3     this.age=age;
 4 }
 5 Animal.prototype.sayName(){
 6     console.log(this.name);
 7 }
 8 var cat=new Animal('heihei',13);
 9 console.log(cat.__proto__===Animal.prototype);//true
10 cat.sayName();//'heihei'

 

原型链

根据原型的第五条规则,当访问一个对象的属性时,会先在对象本身上去找,本身找不到后,会去它的__proto__上找,如果这里还是找不到,就会继续找__proto__.__proto__,因为这个__proto__的值也是一个对象,它也会有自己的__proto__属性,就这样....形成一条原型链。

 1 function Animal(name,age){
 2     this.name=name;
 3     this.age=age;
 4 }
 5 Animal.prototype.sayName(){
 6     console.log(this.name);
 7 }
 8 var cat=new Animal('heihei',13);
 9 console.log(cat.__proto__===Animal.prototype);//true
10 cat.sayName();//'heihei'
11 cat.toString();

 

 

 

使用for..in可以列举一个对象的所有属性

1 var item;
2 for(item in f){
3     //在高级浏览器中for..in只能遍历对象自身的属性,但为了兼容性,需要写以下语句
4     if(f.hasOwnProperty(item)){
5 
6     }
7 }

 

转载于:https://www.cnblogs.com/cherryshuang/p/8505919.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

solaris 10安装Oracle10.2g

1> 检查相关的安装包 官方要求的包: SUNWarc SUNWbtool SUNWhea SUNWlibm SUNWlibms SUNWsprot SUNWtoo SUNWi1of SUNWi1cs SUNWi15cs SUNWxwfnt 执行命令 bash-3.00# pkginfo -i SUNWarc SUNWbtool SUNWhea SUNWlibm SUNWlibms SUNWsprot SUNWsprox SUNWtoo SUNWi1of SUNW…

蜡笔小新里的钢达姆机器人怎么画_写字机器人好用吗? 组装就花了5个小时 还要学习软件、录入字体...

据江苏公共新闻频道《新闻360》报道:新学期开学,各种各样的课后作业成了孩子和家长关注的话题。前不久,一条“孩子购买代写作业机器人,被家长发现”的新闻,引发了强烈争议。这种可以写字的机器人到底是什么&#xff1f…

20165235 Java第一周学习总结

(# 20165235 Java第一周学习总结 Ubuntu下git的安装与使用首先Ubuntu下git的安装,使用sudo apt-get install git下载Ubuntu,下载完成后可以用指令git查看。 安装完git之后输入git config --global user.name "名字",git config --global user.…

解决opencv在pycharm中无代码自动提示的bug

2018-03-0422:19:39 首先,估计这不是bug 可能是我自己误操作导致的,但是让我搞了好久才搞定,实在是苦恼 如图已实现功能,百度里有很多朋友出现了,这个无代码提示的问题 大概是这样的,毕竟,软件这…

eBay:PayPal今年移动支付总额将超35亿美元

北京时间10月18日早间消息,eBay(微博) CEO约翰多诺霍(John Donahoe)周一在旧金山的Web 2.0峰会上表示,通过移动设备,PayPal今年处理的总支付额将超过35亿美元。 多诺霍此前曾预计,PayPal今年通过移动设备的总支付额为30亿美元&…

看风水用什么罗盘最好_兰花用什么花盆栽植最好?

兰花用什么花盆栽植最好?高低深浅如何选?文:花木君经常有兰友咨询关于兰花的花盆的问题,诸如用浅盆还是深盆,用什么材质的花盆适宜之类,由于品种不同,兰丛大小各异,如果泛泛的回答&a…

Shell 示例:利用 $RANDOM 产生随机整数

代码如下: #!/bin/bash# $RANDOM 在每次调用的时候,返回一个不同的随机整数 # 指定的范围是: 0 - 32767 MAXCOUNT10 count1echo echo "$MAXCOUNT random numbers:" echo "-----------------"while [ "$count" -le $MAXCOU…

发布到服务器接口404_接口测试怎么做?

上一期咱们讲到如何使用咱们的龙测工具实现黑盒测试这不,接口也来啦实验步骤抢先看1.首先确定接口的结构,以龙测登录为例请求方式:POSTURL:https://prod.dragontesting.com/api/login请求体:包含两个必填参…

畅通工程 HDU - 1863

省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,…

SoftReference和WeakReference

Java2增强了内存管理功能, 增加了一个java.lang.ref包,其中定义了三种引用类。这三种引用类分别为SoftReference、WeakReference和PhantomReference.通过使用这些引用类,程序员可以在一定程度与GC进行交互,以便改善GC的工作效率。…

docker ubuntu 文件同步_Docker 的数据管理--Docker从入门到精通摘记

Docker 数据管理用户在使用 Docker 的过程中,‍‍往往需要能够查看容器内应用产生的数据,‍‍或者说‍‍需要把容器内的数据进行备份,‍‍再或者说‍‍多个容器之间需要进行数据的共享,‍‍那么这些就必然涉及到容器的数据管理操作…

杂项:UN-APP

ylbtech-杂项:APP1.返回顶部 2.返回顶部3.返回顶部4.返回顶部5.返回顶部 6.返回顶部7.返回顶部8.返回顶部9.返回顶部 10.返回顶部11.返回顶部12.返回顶部13.返回顶部14.返回顶部15.返回顶部 1、https://baike.baidu.com/item/%E6%89%8B%E6%9C%BA%E8%BD%AF%E4%BB%B62…

ubuntu上网慢的问题

2019独角兽企业重金招聘Python工程师标准>>> 测试用的是ubuntu11.10,教育网宽带,静态IP,无路由 如果用的是路由的应该不会很慢吧,路由自带DNS缓存功能的,本地DNS缓存就没有必要了 建立本地DNS缓存: (1) 安装DNS缓存软件…

c include 多层目录_Rsync 秒杀一切备份工具,你能手动屏蔽某些目录吗?

转自:高效运维引言Rsync 是一种快速且通用的命令行实用程序,可通过远程shell在两个位置之间同步文件和文件夹。使用 Rsync,可以镜像数据,创建增量备份,并在系统之间复制文件。复制数据时,你可能要根据文件名…

第2章 一切都是对象

第2章一切都是对象 对象的定义(类型)、创建、存储、操纵、销毁、组成,引用(基本变量名)的初始化 2.1 用引用操纵对象 编程语言操纵内存中元素的方式: C、C:基于特殊语法的间接表示—指针 Java:操纵对象引用 ->对象 创建引用…

Lucene学习笔记(1)

Lucene学习笔记可以搜索文本文件,理论上可以搜索任何类型的数据。只要先把数据转化为文本,就可以对数据进行索引和搜索。使用了反向索引的机制,维护一个词/短语的表,对于每个词和短语都有一个链表描述有哪些文档包含这个词和短语。…

android 录音原始文件_5分钟短文 | Android证书生成,签名,验证,虽然难,但学一次就够了!...

引言从Android演进开始,APK签名就已经成为Android的一部分,并且android要求所有Apks都必须先签名,然后才能将其安装在设备上。关于如何生成密钥以及如何签名的文章很多。一个Apk,但我们将从安全角度进行研究。在对Apk文件进行反编…

WCF跨域 这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP...

尝试向 URI“http://localhost:8001/AccountService.svc”发出请求时出错。这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP 服务。您可能需要与该服务的所有者联系,以发布跨域策略文件并确保该文件允许发送 SOAP 相关的…

【XSY2472】string KMP 期望DP

题目大意 给定一个由且仅由字符H,T构成的字符串\(S\)。 ​  给定一个最初为空的字符串\(T\) ,每次随机地在\(T\)的末尾添加H或者T。 问当\(S\)为\(T\)的后缀时,在末尾添加字符的期望次数。 对\({10}^97\)取模 题解 设\(f_i\)为从\(i-1\)匹配…

go语言api源码中文版_Go语言学习——sync.map源码剖析

1.简介 最近看了下Sync包,详读了sync.map源码,感觉源码实现还是比较巧妙的,有不少可以学习的地方;在讲源码前,先看下sync.map的"历史",从网上搜资料,sync.map是Go语言在1.9版本才引入…