对象创建:

当一个函数对象被创建时候,Function构造器产生的函数对象会运行类似这样的代码:
this.prototype={constructor:this};
假设函数F
F用new方式构造对象时,对象的constructor被设置成这个F.prototype.constructor
如果函数在创建对象前修改了函数的prototype,会影响创建出来对象的construtor属性
如:

function F(){};
F.prototype={constructor:'1111'};
var o=new F();//o.constructor===‘1111’ true

继承原理:

JavaScript中的继承是使用原型链的机制,每个函数的实例都共享构造函数prototype属性中定义的数据,要使一个类继承另一个,需要把父函数实例赋值到子函数的prototype属性。并且在每次new实例对象时,对象的私有属性__proto__会被自动连接到构造函数的prototype。

instanceof就是查找实例对象的私有prototype属性链来确定是否是指定对象的实例

具体实例:

//instanceof实现
function Myinstanceof(obj,type)
{var proto=obj.__proto__;while(proto){if(proto ===type.prototype)break;proto=proto.__proto__;}return proto!=null;
}function View(){}
function TreeView(){}
TreeView.prototype=new View();//TreeView.prototype.__proto__=TreeView.prototype 自动完成
TreeView.prototype.constructor=TreeView;//修正constructor
var view=new TreeView();//view.__proto__=TreeView.prototype 自动完成
alert(view instanceof View); //true 查找到view.__proto__.__proto__时找到
alert(view instanceof TreeView); //true 查找到view.__proto__时找到
alert(Myinstanceof(view,View));  //true
alert(Myinstanceof(view,TreeView)); //true

上面自定义的Myinstanceof就是自己实现的一个instanceof功能的函数,由于IE内核实例存储prototype不是__proto__,所以Myinstanceof会无法通过,其他浏览器上应该都没有问题

转载于:https://www.cnblogs.com/FlyCat/archive/2013/02/28/2936071.html

JavaScript的中对象创建和继承原理相关推荐

  1. js 对象创建及其继承的方法

    重新看红皮书,觉得很多知识多看几遍确实是能看的更明白些.今天重温了一下对象创建和继承,就稍微记下来,巩固一下. js是面向对象的编程语言,ECMA-262吧对象定义为:"无序属性的集合,其属 ...

  2. JavaScript新的对象创建方式---Object.create()

    Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式, 第一个参数是要继承的原型,如果不是一个子函数,可以传一个null, 第二个参 ...

  3. javascript ActiveXObject FileSystemObject 对象,创建、复制、删除、读取文件等

    Javascript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼.富有朝气.但也许你还没有发现并应用它的一些更高级的功能吧?比如,对文件和文件夹进行读.写和删除,就象在VB.VC等高 ...

  4. proto文件支持继承吗_搞懂 Javascript中this 指向及继承原理

    在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JS 的new 到底是干什么的 一.什么是 JS 原型链? 我们知道 JS 有对象,比如 var obj ...

  5. Java: String概述、对象创建的内存原理

    1.String 概述 java.lang.String 类代表字符串,String类定义的变量可以用于指定字符串对象,然后操作该字符串. Java程序中的所有字符串文字(例如:"abc&q ...

  6. JS中对象创建的五中方式

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

  7. MQL5 中对象创建和析构的顺序

    本文主要内容 MQL5 程序的编写基于面向对象编程 (OOP) 理念,这不仅为创建自定义库带来了新的可能性,并允许您使用其他开发人员的完整且经过测试的类.MetaTrader 5 客户端的标准库中有数 ...

  8. JavaScript中的原型继承原理

    在JavaScript当中,对象A如果要继承对象B的属性和方法,那么只要将对象B放到对象A的原型链上即可.而某个对象的原型链,就是由该对象开始,通过__proto__属性连接起来的一串对象.__pro ...

  9. 【Infragistics教程】在javascript构造函数中创建基本继承

    2019独角兽企业重金招聘Python工程师标准>>> [下载Infragistics Ultimate最新版本] 用javascript创建对象有四种方法.具体如下: 对象作为文本 ...

最新文章

  1. win10蓝屏问题,关于驱动kisSaasUrlRedirectKnl64.sys 的
  2. python中*args 与 **kwargs形式的参数的用法详解
  3. 微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案...
  4. 快手小店电脑版_微信PC版更新!支持在小程序中使用微信支付 | 一周资讯
  5. VS2010建立Windows服务项目时的一些问题
  6. [分享] 精神崩溃的老鼠
  7. 孕妇可以在计算机教室待吗,电脑对孕妇有辐射吗?孕妇使用电脑的注意事项
  8. Linux 设备驱动的并发控制
  9. 理性分散投资 收益袋袋平安
  10. 我的AI之路 —— 从裸机搭建GPU版本的深度学习环境
  11. [深度学习-原理]GAN(生成对抗网络)的简单介绍
  12. TP5.1中的验证类 validate用法
  13. windows如何解压tar.gz文件
  14. 利用谷歌浏览器模拟网速慢的情况
  15. matlab中累乘,numpy中的裁剪、压缩和累乘
  16. 生活是艰难的,我又划着我的断桨出发了
  17. 如何利用计算机打印较大的字,Word打印技巧:打印大字-word技巧-电脑技巧收藏家...
  18. Protobuf 在 Ubuntu18 下的安装和使用
  19. Linux系统下7个好用的PDF编辑器推荐
  20. python画饼图柱状图_荐【python数据分析(24)】Matplotlib库基本图形绘制(1)(线形图、柱状图、堆叠图、面积图、填图、饼图)...

热门文章

  1. 边缘AI:国内首个高性能神经网络认知+项目实战发布
  2. 旷视南京研究院2020年校招开启!
  3. OpenCV 4.0 rc版本发布,扩展计算图Graph API
  4. 初级java程序员怎样快速提升自己
  5. 【python零基础入门学习】Python入门,带你快速学习为什么那么多人想学 Python?
  6. Python的类示例
  7. 关于国土空间规划的价值的一些思考
  8. python文件的路径_如何从目录中给出python文件的路径
  9. mysql执行效率低_如何查询mysql中执行效率低的sql语句
  10. Python ID 生成(UUID、自增、19位雪花算法ID)