通过构造函数F创建的对象实例p 这个对象p的原型对象是 构造函数中prototype属性指向的对象s,
这个对象p中也有个非标准的__proto__属性指向构造函数prototype属性
所指向的对象s,所以就有 p.__proto__ === F.prototype;
在对象P的原型对象s中有个属性constructor属性,指向的是构造函数本身。
如果对象p的原型对象s被重写,那么P的构造函数不再是F,而是Object

例如:

 function F(){};
var p = new F();
console.log(p.__proto__ === F.prototype)//true
console.log(p.constructor === F) //true
console.log(p instanceof F) //true
F.prototype = {};//重写原型对象
p2 = new F() //重新实例一个对象p2
console.log(p instanceof F,p2 instanceof F) //false,true instanceof运算符返回一个布尔值,
 //instanceof运算符可以用来判断某个构造函数的prototype属性是否存在另外一个要检测对象的原型链上。
//instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。 /*
Instanceof的判断队则是:沿着A的__proto__这条线来找,同时沿着B的prototype这条线来找,如果两条线能找到同一个引用,即同一个对象,那么就返回true。如果找到终点还未重合,则返回false。 */
console.log(p.constructor === F) //true
console.log(p2.constructor === F)//false
console.log(p2.constructor === Object)//true
//我们重写F.prototype的时候,并没有改变p1属性prototype的指向,它指向的还是老的那个F.prototype 对象
//原型的动态性 强调的前提是同一个原型对象,即对象(p1)指向的原型对象和类(F)指向的原型对象是同一个,
//当发生原型对象重写的时候,实际上是有个两个原型对象的,一个新的,一个老的。

instanceof 复杂用法:

function Ben() {}
console.log(Object instanceof Object); //true
console.log(Function instanceof Function); //true
console.log(Function instanceof Object); //true
console.log(Ben instanceof Function); //true
console.log(String instanceof String); //false
console.log(Boolean instanceof Boolean); //false
console.log(Ben instanceof Ben); //false

在这里构造函数F也是对象,所以F也有原型对象s2,F的原型对象s2 是 构造函数Function中原型属性prototype所指向的原型对象s2;

Function函数也是对象所以,Function函数的构造函数也是Function...因此所有函数都是由Function构造函数的实例(包括function Object(){})

Function的原型属性prototype指向的对象和Function的原型对象__proto__ 指向的对象相等 并且Function.__proto__对象是一个特殊的函数对象,

不具有prototype属性

 console.log(F.__proto__ === Function.prototype)//true
console.log(Function.__proto__ === Function.prototype) //true function(){}
console.log(Function.__proto__.__proto__ === Object.prototype)//true
console.log(Object.prototype.__proto__ === null)//true

对象字面量产生的对象连接到Object.prototype。函数对象连接到Function.prototype(该原型对象本身连接到Object.prototype).

最后一张图理解Object和Function

(转):

一句话简单理解javascript中的原型对象的更多相关文章

  1. 简单理解javascript中的原型对象,实现对之间共享属性和行为

    javascript中提供了构造函数.可以方便的创建对象. 典型的构造函数例如以下: function Person(name, age) { this.name = name; this.age = ...

  2. 理解JavaScript中的原型继承(2)

    两年前在我学习JavaScript的时候我就写过两篇关于原型继承的博客: 理解JavaScript中原型继承 JavaScript中的原型继承 这两篇博客讲的都是原型的使用,其中一篇还有我学习时的错误 ...

  3. 理解javascript中的原型模式

    一.为什么要用原型模式. 早期采用工厂模式或构造函数模式的缺点:  1.工厂模式:函数creatPerson根据接受的参数来构建一个包含所有必要信息的person对象,这个函数可以被无数次的调用,工厂 ...

  4. 如何理解JavaScript中的原型和原型链

    首先是一张关系图,避免抽象化理解时产生的困难 Function对象 函数对象是JavaScript学习中不可避免的一部分,而且这一部分相对重要且抽象 函数的创建方式有2种: 字面量创建 var foo ...

  5. 深入理解javascript构造函数和原型对象

    ---恢复内容开始--- 对象,是javascript中非常重要的一个梗,是否能透彻的理解它直接关系到你对整个javascript体系的基础理解,说白了,javascript就是一群对象在搅..(哔! ...

  6. javascript中的原型对象

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 简单理解Javascript中的call 和 apply

    javascript中面向对像的能力是后来加进来的, 为了兼容性, 所以整出了很多奇特的东西, function Animal(){ this.name = "Animal"; t ...

  8. 理解JavaScript中的window对象

    前言 每个JavaScript环境都有一个全局对象(global object).在全局范围内创建的任何变量实际上都是这个对象的属性,而任何函数都是它的方法.在浏览器环境中,全局对象是window对象 ...

  9. 彻底理解javascript 中的事件对象的pageY, clientY, screenY的区别和联系。

    说到底, pageY, clientY, screenY的计算,就是要找到参考点, 它们的值就是: 鼠标点击的点----------- 和参考点指点----------的直角坐标系的距离 stacko ...

随机推荐

  1. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数017·point点函数

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数017·point点函数 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...

  2. IIS7 全新管理工具AppCmd.exe的命令使用实例分享

    IIS 7 提供了一个新的命令行工具 Appcmd.exe,可以使用该工具来配置和查询 Web 服务器上的对象,并以文本或 XML 格式返回输出. 下面是一些可以使用 Appcmd.exe 完成的任务 ...

  3. git push :推送本地更改到远程仓库的三种模式

    摘要:由于在git push过程中,no-fast-forward 的push会被拒绝,如何解决git push失败的问题?这里面有三种方法,分别会形成merge形式的提交历史,线性形式的提交历史,覆 ...

  4. [原] MSSQL MDF文件太大问题

    USE 你的库名; GO -- 数据库空间使用情况 EXEC sp_spaceused; -- 查下文件空间使用情况 SELECT file_id, name, [文件大小(MB)] = size / ...

  5. 分享前端Facebook及Twitter第三方登录

    最近公司要求做海外的第三方登录:目前只做了Facebook和Twitter;国内百度到的信息太少VPN FQ百度+Google了很久终于弄好了.但是做第三方登录基本上都有个特点就是引入必须的js,设置 ...

  6. dev GridControl实现拖拽

    一.示例说明 以gridControl1和gridControl2为例,从gridControl1拖拽行到gridControl2中去. 二.属性设置 gridControl2.AllowDrop = ...

  7. 学习Linux系列--Python资源收集

    本系列文章记录了个人学习过程的点点滴滴. 回到目录 玩Linux,不懂一门脚本语言是不行的,我这里选择的是Python. 10.入门资源 下面前三遍是比较系统的文档,后面是一些心得,我看了好几天,终于 ...

  8. JSP实现 乘法口诀输出

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  9. 一个ubuntu phper的自我修养(lamp)

    lamp环境搭建出坑记 lamp虽然大家都懂,但是还是要解释一下先,要做的是一个狭义的解释,以对应我们即将搭建的环境. L指linux(ubuntu). A指apache(apache2). M指my ...

  10. STM32F429i-DISCO FreeRTOS keil STM32CubeMX

    目标: 在STM32F429 Disco开发板上用FreeRTOS双线程点亮双闪led. 准备: 0. STM32F429i-DISCO 1. keil ARMMDK 5.13 2. STM32Cub ...