一句话简单理解javascript中的原型对象
通过构造函数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中的原型对象的更多相关文章
- 简单理解javascript中的原型对象,实现对之间共享属性和行为
javascript中提供了构造函数.可以方便的创建对象. 典型的构造函数例如以下: function Person(name, age) { this.name = name; this.age = ...
- 理解JavaScript中的原型继承(2)
两年前在我学习JavaScript的时候我就写过两篇关于原型继承的博客: 理解JavaScript中原型继承 JavaScript中的原型继承 这两篇博客讲的都是原型的使用,其中一篇还有我学习时的错误 ...
- 理解javascript中的原型模式
一.为什么要用原型模式. 早期采用工厂模式或构造函数模式的缺点: 1.工厂模式:函数creatPerson根据接受的参数来构建一个包含所有必要信息的person对象,这个函数可以被无数次的调用,工厂 ...
- 如何理解JavaScript中的原型和原型链
首先是一张关系图,避免抽象化理解时产生的困难 Function对象 函数对象是JavaScript学习中不可避免的一部分,而且这一部分相对重要且抽象 函数的创建方式有2种: 字面量创建 var foo ...
- 深入理解javascript构造函数和原型对象
---恢复内容开始--- 对象,是javascript中非常重要的一个梗,是否能透彻的理解它直接关系到你对整个javascript体系的基础理解,说白了,javascript就是一群对象在搅..(哔! ...
- javascript中的原型对象
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 简单理解Javascript中的call 和 apply
javascript中面向对像的能力是后来加进来的, 为了兼容性, 所以整出了很多奇特的东西, function Animal(){ this.name = "Animal"; t ...
- 理解JavaScript中的window对象
前言 每个JavaScript环境都有一个全局对象(global object).在全局范围内创建的任何变量实际上都是这个对象的属性,而任何函数都是它的方法.在浏览器环境中,全局对象是window对象 ...
- 彻底理解javascript 中的事件对象的pageY, clientY, screenY的区别和联系。
说到底, pageY, clientY, screenY的计算,就是要找到参考点, 它们的值就是: 鼠标点击的点----------- 和参考点指点----------的直角坐标系的距离 stacko ...
随机推荐
- 使用sklearn优雅地进行数据挖掘【转】
目录 1 使用sklearn进行数据挖掘 1.1 数据挖掘的步骤 1.2 数据初貌 1.3 关键技术2 并行处理 2.1 整体并行处理 2.2 部分并行处理3 流水线处理4 自动化调参5 持久化6 回 ...
- spring-cloud-event-sourcing-example-master 运行效果及说明
1.微服务架构下电商示例,部署成功!监控等技术细节未深入研究. 简单介绍: 配置服务(config-service ),端口8888,健康检查 xx:8888/hea ...
- java代码优化
优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率. 1.尽量指定类的final修饰符 带有final修饰符的类是不可派生的.在Java核心API中,有许多应用final的例子,例如java ...
- Visual Studio 2015 显示正忙 正在等待内部操作完成
网上查到的: 1.关闭IntelliTrace 2.进入项目文件夹有.vs的隐藏文件夹,进去找到和项目一样的名字的文件夹,再找v14文件夹,进去,删掉.suo文件 http://www.cnblogs ...
- MySql SELECT INTO 记录为空的问题
SELECT Id INTO @Id FROM GiftCode WHERE Status = 1 AND GiftId = #GiftId# ORDER BY Id ASC LIMIT 1; ...
- 设置 phoneGap/Cordova 3.4 应用程序启动动画闪屏 SplashScreen
当Cordova 程序打包并安装到手机中后,我们会发现启动程序时,会有数秒的黑屏现象,常见的解决方法则是设置闪屏后面. 这里以 Android 程序为例,介绍Cordova设置启动画面的方法. 1. ...
- CoreData 轻量级迁移
CoreData 轻量级迁移 Core Data 的轻量级迁移可以处理对数据模型进行的简单更改,例如将新属性添加到现有实体中,轻量级迁移基本上与普通迁移相同,区别就是不需要映射模型,因为Core Da ...
- 上海有线通下载exe会302转发请求
起因: 做的软件用的clickonce,在公网的clickonce下载exe时一直报错,在vpn环境下没问题.错误提示如下: + HTTP redirect is not allowed for ap ...
- 08-FPGA状态机设计实例——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的:1.学习状态机的相关概念 2.理解一段式.两段式以及三段式状态机的区别以及优缺点 实验平台:芯航线FPGA核心板 实验原理: 状态机全称是有限状态机(fin ...
- 在Centos7服务器上搭建网关服务
准备搭建网关的服务器环境介绍: OS:Centos7.1 网络:一块网卡,能够上网(能够连接到更外层网络),IP为192.168.7.54 内存.CPU随意 以下命令的作用依次是: 开启ip_forw ...