一、函数对象和普通对象

   凡是通过new Function()创建的都是函数对象,其它的都是普通对象。Function,Object,Array,Number,String,Boolean,Date是JS自带的函数对象。

   二、原型规则

  1. 所有的引用类型(数组,函数,对象)都具有对象特性,即可以自由扩张属性(除了null)。
  2. 所有的引用类型(数组,函数,对象)都有一个_proto_属性(隐式原型属性,实现原型链的关键),属性值是一个普通对象。
  3. 所有的函数对象都有一个prototype(显示原型)属性,属性值是一个普通的对象。
  4. 所有的引用类型(数组,函数,对象)的_proto_属性执行它的构造函数的"prototype"属性值。(obj.__proto__ === Object.prototype)
  5. 当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去它的_proto_(即它的构造函数的 prototype(显式原型))中寻找

    三、原型链

    注:方框为构造函数,圆框为对象,特例:Object.prototype 的 隐式原型是 null (JS避免死循环)

    四、构造函数

    JS中,一般大写字母开头的函数都是构造函数。如下:

    上面的例子,同过new 创建了两个实例,每个实例都有一个constructor属性,指向其构造函数。

    所以我们得出一个结论:

    实例的构造函数属性(constructor)指向构造函数。

    new 创建实例的过程:

    1. 创建空对象;

      var obj = {};

    2. 设置新对象的constructor属性为构造函数的名称,设置新对象的__proto__属性指向构造函数的prototype对象;

      obj.__proto__ = ClassA.prototype;

    3. 使用新对象调用函数,函数中的this被指向新实例对象:

      ClassA.call(obj);  //{}.构造函数();

    4. 将初始化完毕的新对象地址,保存到等号左边的变量中

    注意:若构造函数中返回this或返回值是基本类型(number、string、boolean、null、undefined)的值,则返回新实例对象;若返回值是引用类型的值,则实际返回值为这个引用类型

    五、原型对象

    之前我们提过,每一个函数对象都有一个prototype(原型属性),指向一个原型对象。

    在默认情况下,所有的原型对象都会自动获得一个 constructor(构造函数)属性,这个属性(是一个指针)指向 prototype 属性所在的函数(Person)

    person1.constructor === Person;

    Person.prototype.constructor === Person;

    结论:原型对象(Person.prototype)是构造函数(Person)的一个实例。

Javascript 笔记:原型和原型链的更多相关文章

  1. JavaScript笔记——面向对象与原型

    JavaScript也是一门面向对象的语言.面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,JavaScript竟然没有class,因此它的面向对象也 ...

  2. <深入理解JavaScript>学习笔记(5)_强大的原型和原型链

    前言 JavaScript 不包含传统的类继承模型,而是使用 prototypal 原型模型. (prototypal :原型.学好英语还是很重要的) 虽然这经常被当作是 JavaScript 的缺点 ...

  3. JavaScript原型与原型链学习笔记

    一.什么是原型?原型是一个对象,其他对象可以通过它实现属性继承.简单的说就是任何一个对象都可以成为原型 prototype属性: 我们创建的每个函数都有一个prototype属性,这个属性是一个指针, ...

  4. JavaScript之继承(原型链)

    JavaScript之继承(原型链) 我们知道继承是oo语言中不可缺少的一部分,对于JavaScript也是如此.一般的继承有两种方式:其一,接口继承,只继承方法的签名:其二,实现继承,继承实际的方法 ...

  5. 【javascript基础】4、原型与原型链

    前言 荒废了好几天,在宿舍闷了几天了,一直想着回家放松,什么也没搞,论文就让老师催吧.不过,闲的没事干的感觉真是不好,还是看看书,写写博客吧,今天和大家说说函数的原型. 原型是什么 第一次看到这个的时 ...

  6. 【JavaScript】深入理解JavaScript之强大的原型和原型链

    由于JavaScript是唯一一个被广泛使用的基于原型继承的语言,所以理解两种继承模式的差异是需要一定时间的,今天我们就来了解一下原型和原型链. AD: hasOwnProperty函数: hasOw ...

  7. 《JavaScript 闯关记》之原型及原型链

    原型链是一种机制,指的是 JavaScript 每个对象都有一个内置的 __proto__ 属性指向创建它的构造函数的 prototype(原型)属性.原型链的作用是为了实现对象的继承,要理解原型链, ...

  8. Javascript 原型和原型链

    先来了解一下Javascript中的原型:”原型也是一个对象,原型可以用来实现继承...“ 对于 原型,构造函数,以及实例之间的关系:“每个(构造)函数都有一个原型属性,原型对象都包含一个指向构造函数 ...

  9. javascript 原型 和 原型链

    最近几天,好些新同事来问原型,原型链啥的.本身作为菜鸟的我好像也没有好好整理过这个,这里写写自己的理解. 原型 大家都知道,JavaScript 不包含传统的类继承模型,而是使用 prototype ...

  10. JavaScript深入之从原型到原型链(本文转载)

    JavaScript深入之从原型到原型链(本文转载) https://github.com/mqyqingfeng/Blog.原文地址 构造函数创建对象 我们先使用构造函数创建一个对象: functi ...

随机推荐

  1. HTTPS与HTTP区别

    HTTP + 加密 + 认证 + 完整性保护 = HTTPS http的全称是Hypertext Transfer Protocol Vertion (超文本传输协议) HTTPS: HTTPS(Se ...

  2. Redis入门学习(二):下载安装

    Linux操作系统 Download, extract and compile Redis with: $ wget http://download.redis.io/releases/redis-4 ...

  3. Java的 Annotation 新特性

    对于软件程序的开发经过了三个发展过程: —— 将所有配置相关的内容直接写到代码之中 —— 将配置与代码程序独立,将程序运行的时候根据配置文件进行操作 —— 配置信息对用户透明且无用,将配置信息写回代码 ...

  4. libtool编译

    1.充分利用共享库的能力.libtool 是一个通用库支持脚本 2.我们可以认为libtool是gcc的一个抽象,也就是说,它包装了gcc或者其他的任何编译器,用户无需知道细节,只要告诉libtool ...

  5. Windows 10 Java开发环境配置

    一.JDK下载 安装java开发环境,第一步就是下载jdk安装包.打开浏览器进入oracle官网下载.这里注意jdk和jre的区别,jdk(java develop environment)是java ...

  6. oracle dg状态检查及相关命令

    oracle dg 状态检查 先检查备库的归档日志同步情况 SELECT NAME,applied FROM v$archived_log; alter database recover manage ...

  7. Asp.Net六大内置对象

    前面学习mvc管道处理模型的时候,我们晓的HttpContext是贯穿全文的一个对象,在HttpRuntime产生,现在我们所谓的Asp.Net六大内置对象,其实就是HttpContext的属性.具体 ...

  8. Delphi-基础(for循环)

    1.判断0~10之间,当循环I=3时候跳出当前循环,当I等于8时候,退出当前循环. procedure Countand(); var I: Integer; begin do begin Write ...

  9. vs2017离线安装vs tools for unity

    Visual Studio Tools for Unity 从vs2017开始就不提供单独的安装包下载,需要通过vs安装程序在线安装. vs2017离线安装vs tools for unity 那么如 ...

  10. 多线程(三)多线程同步_基本介绍及mutex互斥体

    同步进制的引入为了解决以下三个主要问题:1.控制多个线程之间对共享资源访问,保证共享资源的完整性例如:线程A对共享资源进行写入,线程B读取共享资源2.确保多个线程之间的动作以指定的次序发生例如:线程B ...