1.原型是什么?
    在构造函数创建出来的时候,系统会默认的创建并关联一个对象,这个对象就是原型,原型对象默认是空对象
    默认的原型对象中会有一个属性constructor指向该构造函数
 原型的作用
    原型对象中的成员,可以被使用和它关联的构造函数创建出来的所有对象共享
2. 原型对象的使用
    1. 使用对象的动态特性(指对象创建出来以后,为对象添加新的属性或方法),为原型对象添加成员
    2. 直接替换原型对象
    注意事项:
        直接替换原型对象,会导致替换之前创建的对象的原型和替换之后创建的对象的原型不一致3. 原型的使用该注意事项
    1.使用对象访问属性的时候,会现在对象中查找,如果找到了就直接使用
    如果没有找到,就去原型中查找
    2.使用对象设置属性的时候(点),只会在对象本身中查找,不会去原型中查找,如果在对象本身中没有找到这个属性则给该对象新增一个属性,如果在对象中有这个属性,修改这个属性
    3.如果在原型对象中有引用类型的属性,那么使用对象进行修改该属性内容,则其他所有跟这个原型对象相关的对象都会受到影响   一般情况下不会将属性放到原型对象中
        //一般情况下原型中只会放需要共享的方法

Person.prototype.car = {};
var p = new Person( );
p.car = {}; //这是修改属性
p.car.brand= ""; //这是修改属性的内容

4.一般情况下不会将属性添加到原型对象中
    只会将需要共享的方法,添加到原型对象中

4. __proto__
    1.这个属性不是标准属性,所以存在通用性问题
    2.一般不推荐使用这个属性
    3.调试的时候,可以使用这个属性
    4.这个属性是原型中的属性(??不是实例的?)
替换原型时候的注意事项:
    在新替换的原型中,没有constructor属性,会影响三角结构关系的合理性
    so,在新替换的原型中,手动添加constructor属性,以保证关系的合理性,赋值为关联的构造函数。
 
原型链
什么是原型链
    每个构造函数都有原型对象,每个对象都有构造函数,每个构造函数的原型对象都是对象,也就有构造函数,然后就形成一个链式的结构,我们称之为原型链。
通过修改原型链的结构,实现继承的方式就是原型继承。
 
对象和原型的成员关系
```js
function Person(){};
var p = new Person();
```
p对象中包含的成员有:Person.prototype中的成员和自身拥有成员
Person.prototype中的成员有:Object.prototype的成员和自身的成员
p对象可以访问Person.prototype和Object.prototype中的所有成员

Object.prototype的成员
* constructor :指向和该原型相关的构造函数
* hasOwnProperty 方法: 判断对象本身是否拥有某个属性
* properIsEnumerable 方法: 1.判断属性是否属于对象本身,2.判断属性是否可以被遍历
* toString toLocaleString: 将对象转换成字符串 toLocalString转换成字符串的时候应用的本地的设置格式
* valueOf 方法:在对象参与运算的时候,首先调用valueOf方法获取对象的值,如果该值无法参与运算,将会调用toString方法
* __proto__ 属性: 指向当前对象的原型对象

 
完整原型链

1.Function构造函数可以用Function.__proto__来访问Function.prototype. 这是因为Function构造函数的构造函数是他本身,作为实例化对象的角色来访问,可行。

2.任何函数都是函数,他都继承Function的所有属性和方法,而Function是内置的构造函数,也是对象,都是继承Object的所有属性和方法。

js之原型,原型链的更多相关文章

  1. JS面向对象之原型链

      对象的原型链 只要是对象就有原型 原型也是对象 只要是对象就有原型, 并且原型也是对象, 因此只要定义了一个对象, 那么就可以找到他的原型, 如此反复, 就可以构成一个对象的序列, 这个结构就被成 ...

  2. js中原型和原型链

    1.原型: 在JavaScript 中,对象被表现为prototype . 原型其实一直存在于我们接触过的任何一个对象. 2. Tip:在函数对象中也存在__proto__属性,但是查看函数对象的原型 ...

  3. js通过沿着作用域链还是原型链查找变量

    这是一道非常典型的JS闭包问题,结果和具体的解析请看这里. 对于其中的`函数作用域链的问题`博主似乎没有解释清楚,有一些疑问:js中的变量到底是沿着作用域链还是原型链查找呢? 首先,要分清作用域链与原 ...

  4. js中的原型,原型链和继承

    在传统的基于Class的语言如Java.C++中,继承的本质是扩展一个已有的Class,并生成新的Subclass. 由于这类语言严格区分类和实例,继承实际上是类型的扩展.但是,JavaScript最 ...

  5. 原型链污染(Node.js污染,javasrcipt原型链污染的)

    学习链接: https://www.jianshu.com/p/6e623e9debe3 关于NJS  https://xz.aliyun.com/t/7184 相关题是 GYCTF  ez_expr ...

  6. js中的原型对象链

    由于原型对象也是一个对象,它也有自己的原型对象并继承对象中的属性,这就是原型对象链:对象继承其原型对象,而原型对象继承它的原型对象,以此类推. 我们创建的每一个函数都有一个prototype(原型)属 ...

  7. js中的原型、继承的一些想法

    最近看到一个别人写的js类库,突然对js中的原型及继承产生了一些想法,之前也看过其中的一些内容,但是总不是很清晰,这几天利用空闲时间,对这块理解了一下,感觉还是有不通之处,思路上没那么条理,仅作为分享 ...

  8. 谈谈JS中的原型

    不知道大家对JS中的原型理解的怎么样,我想如果大家对JS中的原型对象以及prototype属性十分熟悉的话对后面原型链以及继承的理解会十分的容易,这里想和大家分享自己对其的理解,请先看下面这段代码O( ...

  9. JS对象与原型

    一. JS的对象 1.1 创建对象的几种方式 1.1.1 通过字面量创建对象 在js中,一对{} 其实就是一个对象 var person = { name: "tom", age: ...

  10. 基于原生JS封装数组原型上的sort方法

    基于原生JS封装数组原型上的sort方法 最近学习了数组的原型上内置方法的封装,加强了用原生JS封装方法的能力,也进一步理解数组方法封装的过程,实现的功能.虽然没有深入底层,了解源码.以下解法都是基于 ...

随机推荐

  1. poj3278

    #include<iostream> #define MAX 100001 int john,cow; int queue[MAX]; int vis[MAX]; int ans; voi ...

  2. 7、LwIP协议规范翻译——网络接口

    7.网络接口 在lwIP中,物理网络硬件设备驱动是由类似于BSD网络接口结构表示.网络接口结构如图5所示.网络接口被保存在一个全局的链表中,通过结构体中的next指针来完成链表的链接. 每个网络接口都 ...

  3. python 控制语句基础---->代码块:以为冒号作为开始,用缩进来划分作用域,代表一个整体,是一个代码块,一个文件(模块)也称为一个代码块 | 作用域:作用的范围

    # ### 代码块:以为冒号作为开始,用缩进来划分作用域,代表一个整体,是一个代码块,一个文件(模块)也称为一个代码块 # ### 作用域:作用的范围 print(11) print(12) prin ...

  4. 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...

  5. JavaBean持久化

    JavaBean持久化并不局限于Swing构件的存储,可以使用该机制存储任意对象的集合,只要遵守一些简单的规则即可. XMLEncoder内置了对下列类型的支持: ●null ●所有基本类型及其包装器 ...

  6. Apache环境下配置多个站点的SSL证书

    重新创建apache目录中conf/extra/下的httpd-ssl.conf文件 NameVirtualHost *:443 Listen 443 <VirtualHost *:443> ...

  7. 解决xp突然出现开机登录界面的问题

    对系统进行网络相关的设置后,有时会让系统开启时突然冒出登录窗口,即使我们没有对自己的系统设置开机密码,也会冒出这个,需要回车一下才会进入系统:关机时,xp特有的“关机”,“待机”,“重新启动”按钮会变 ...

  8. python dict的函数

    1. dict.clear() 删除字典内所有元素 2. dict.copy() 返回一个字典的浅复制 3. dict.fromkeys(seq[, val]) 创建一个新字典,以序列 seq 中元素 ...

  9. JAVA:IDEA使用Junit(3)

    1.配置 File ——> Project Structure ——> Libraries ——> + ——>搜索Junit类库 确认ok即可 2.编辑项目 选择创建 配置生成 ...

  10. 今天整理了一下Winform用的UI插件信息

    平时主要用了一下几个比较好的UI控件: 1:IrisSkin2 皮肤插件.这是一款与编程开发相关的素材资源,主要是提供一些采用IrisSkin2.dll控件进行软件窗口换肤的素材文件,包括一些GIF图 ...