转载 https://blog.csdn.net/weixin_44976833/article/details/101322081

构造函数和原型和原型链

1.静态成员和实例成员

1.1静态成员

静态成员在构造函数本身上添加的成员,静态成员只能通过构造函数来访问

function Person(name,age){this.name = name;this.age = age;
}
//sex就是静态成员
Person.sex = '男';
var one = new Person('小明',12);
console.log(Person.sex);  //静态成员只能通过构造函数来访问

1.2实例成员

实例成员就是构造函数内部通过this添加的成员,实例成员只能通过实例化的对象来访问;

//nam,age,study就是实例成员
function Person(nam,age){this.nam = nam;this.age = age;this.study = function(){console.log('我再认真学习js');}
}
var one = new Person('小明',12);
console.log(one.study);  //实例成员只能通过实例化对象来访问

2.构造函数原型prototype

构造函数通过原型分配的函数是所有对象所共享的,规定每一个构造函数都有一个prototype属性,指向另一个对象,这个prototype就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有的,可以把那些不变的方法直接定义在prototype对象上,这样所有对象的实例就可以共享这些方法;

3.对象原型__proto__

1.对象都会有一个属性__proto__ 指向构造函数的prototype原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性和方法,就是因为对象有__prorto__原型的存在;

2.__proto__对象原型和原型对象prototype是相等的;

3.__proto__对象原型的意义就是在于为对象查找机制提供一个方向,但是它是一个非标准属性,实际开发中不可以使用这个属性,它只是内部指向原型对象prototype;

4.constructor构造函数

1.对象原型__proto__和构造函数prototype原型对象里面都有一个属性constructor属性,constructor称为构造函数,因为它指回构造函数本身;

2.constructor主要是用于记录该对象引用于哪个构造函数,它可以让原型对象重新指向原来的构造函数;

3.一般情况下,对象的方法都在构造函数的原型对象中设置,如果有多个对象方法,我们可以给对象采用对象形式赋值,但是这样就会覆盖构造函数原型对象原来的内容,修改后的原型对象constructor就不在指向当前构造函数,此时可以在修改后的原型对象中,添加一个constructor指向原来的构造函数

 function Person(uname, age) {this.uname = uname;this.age = age;}// 很多情况下,我们需要手动的利用constructor 这个属性指回 原来的构造函数
Person.prototype = {// 如果我们修改了原来的原型对象,给原型对象赋值的是一个对象,则必须手动的利用constructor指回原来的构造函数// 手动设置指回原来的构造函数constructor: Person, sing: function() {console.log('我唱歌很好听');},study: function() {console.log('我正在学习js');}
}
var one = new Person('小明', 18);

5.构造函数实例和原型对象三角关系

1.构造函数的prototype属性指向了构造函数原型对象;

2.实例对象是由构造函数创建的,实例对象的__proto__属性指向了构造函数的原型对象;

3.构造函数的原型对象的constructor属性指向了构造函数,实例对象原型的constructor属性也指向了构造函数;

6.原型链和成员的查找机制

任何对象都有原型对象,也就是prototype属性,任何原型对象也是一个对象,该对象有__proto__属性,这样一层一层往上找,就会形成一条链,原型链;

1.当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性。

2.如果没有就查找它的原型(也就是 __proto__指向的 prototype 原型对象)。

3.如果还没有就查找原型对象的原型(Object的原型对象)。

4.依此类推一直找到 Object 为止(null)。

5.__proto__对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线。

构造函数的原型和原型链相关推荐

  1. 详解面向对象、构造函数、原型与原型链

    详解面向对象.构造函数.原型与原型链 为了帮助大家能够更加直观的学习和了解面向对象,我会用尽量简单易懂的描述来展示面向对象的相关知识.并且也准备了一些实用的例子帮助大家更加快速的掌握面向对象的真谛. ...

  2. ES6/02/创建对象,构造函数和原型,原型和原型链,this指向,类,ES5新增的方法,数组方法,回调函数,ES5新增的字符串方法,ES5中新增的对象方法

    创建对象 1,利用new Object()创建对象 var obj1 =new Object(); 2,利用对象字面量创建对象 var obj2={}; 3,利用构造函数创建对象 function S ...

  3. 【进阶5-1期】重新认识构造函数、原型和原型链

    引言 前端进阶系列已经到第 5 期啦,本期正式开始原型 Prototype 系列. 本篇文章重点介绍构造函数.原型和原型链相关知识,如果你还不知道 Symbol 是不是构造函数.constructor ...

  4. JavaScript进阶-编程思想、构造函数的原型对象、对象原型、原型继承以及原型链

    编程思想 面向过程 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次 调用就可以了. 优点: 性能比面向对象高,适合跟硬件联系很紧密 的东西,例如单 ...

  5. js_高级_对象、面向对象、构造函数、实例对象、原型、原型链

    1.什么是对象 汽车不是对象是是一类事物,一辆汽车是对象. 2.什么是面向对象 3.面向对象的特点 案例来理解  面向过程 和 面向对象---打印出学生的成绩表 面向过程:如何做这件事情 ,把事情拆成 ...

  6. 粗解构造函数,原型,原型链,显式原型,隐式原型

    构造函数 引入:使用工厂函数来创造对象时,使用var obj =new Object(),创建后都是object,无法区分 创建一个构造函数,专门用来创建特定类型的对象,例如人的对象,动物的对象.构造 ...

  7. 浅谈JS原型与原型链(一)

    最近学习JavaScript原型与原型链的时候,被这块知识烧得脑壳疼,prototype与__proto__混淆不清.网上各种图解,都画的好复杂,绕老绕去,不明所以,看得越来越糊涂.还是亲自动手敲敲, ...

  8. js原型和原型链_重学js --原型与原型链

    一.什么是原型: .每个对象都有一个__proto__属性,并且指向它的prototype原型对象 每个构造函数都有一个prototype原型对象 prototype原型对象里的constructor ...

  9. (转)【javascript基础】原型与原型链

    原文地址:http://www.cnblogs.com/allenxing/p/3527654.html 前言 原型是什么 理解原型对象 原型对象 isPrototypeOf hasOwnProper ...

最新文章

  1. 刺客信条奥德赛无法加载库_点评刺客信条起源、奥德赛、英灵殿,哪个最好玩?...
  2. 理解AppDomain
  3. Java基础知识(数据类型和集合)
  4. Upload-Labs(17-20)
  5. 第一章--电商设计表电商项目--数据库设计
  6. Pytorch 一种调整学习率的思路
  7. python 读取元组对的key_Python基本认识基本类型
  8. 《CSS权威指南》第3版
  9. springmvc/ssm框架详细图文解说流程图及运行原理_附源码
  10. 基于运放和三极管的恒流源电路
  11. 【冬镜网】什么是搜索引擎优化?
  12. 【题解】【AcWing】1564. 哈希
  13. ALL_TAB_COLS
  14. 2021年4月2日 星期五 农历二月 阴
  15. 几种修复照片画质的方法
  16. Learning to Rank系列之Pointwise方法
  17. 『网络迷踪』ctfshow-国足加油
  18. html导出excel 隐藏部分,html导出Excel方法
  19. 第十一章:实现SpringBoot单个、多个文件的上传
  20. 视频转mp3 kux视频怎么转换成mp3格式

热门文章

  1. linux shell rman删除归档_我们一起学一学渗透测试——黑客应该掌握的Linux基础
  2. 我这么努力读个博士,难道只是为了进个高校拿5000每月的工资?
  3. Nature封面:城里人为什么容易路痴?
  4. 知乎热议:如果不发论文,我们用什么证明自己的科研实力?
  5. 数据管理,数据治理,数据中心,数据中台,数据湖这下就分清楚了!
  6. 优秀程序员的 18 大法则
  7. 消息队列RocketMQ性能测试案例
  8. 阿里云EDAS 3.0重磅发布,无侵入构建云原生应用
  9. 基于云存储网关的Veeam备份归档上云方案
  10. 【医疗】疫情下的医院信息化短板如何补足?