JavaScript的中对象创建和继承原理
对象创建:
当一个函数对象被创建时候,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的中对象创建和继承原理相关推荐
- js 对象创建及其继承的方法
重新看红皮书,觉得很多知识多看几遍确实是能看的更明白些.今天重温了一下对象创建和继承,就稍微记下来,巩固一下. js是面向对象的编程语言,ECMA-262吧对象定义为:"无序属性的集合,其属 ...
- JavaScript新的对象创建方式---Object.create()
Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式, 第一个参数是要继承的原型,如果不是一个子函数,可以传一个null, 第二个参 ...
- javascript ActiveXObject FileSystemObject 对象,创建、复制、删除、读取文件等
Javascript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼.富有朝气.但也许你还没有发现并应用它的一些更高级的功能吧?比如,对文件和文件夹进行读.写和删除,就象在VB.VC等高 ...
- proto文件支持继承吗_搞懂 Javascript中this 指向及继承原理
在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JS 的new 到底是干什么的 一.什么是 JS 原型链? 我们知道 JS 有对象,比如 var obj ...
- Java: String概述、对象创建的内存原理
1.String 概述 java.lang.String 类代表字符串,String类定义的变量可以用于指定字符串对象,然后操作该字符串. Java程序中的所有字符串文字(例如:"abc&q ...
- JS中对象创建的五中方式
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...
- MQL5 中对象创建和析构的顺序
本文主要内容 MQL5 程序的编写基于面向对象编程 (OOP) 理念,这不仅为创建自定义库带来了新的可能性,并允许您使用其他开发人员的完整且经过测试的类.MetaTrader 5 客户端的标准库中有数 ...
- JavaScript中的原型继承原理
在JavaScript当中,对象A如果要继承对象B的属性和方法,那么只要将对象B放到对象A的原型链上即可.而某个对象的原型链,就是由该对象开始,通过__proto__属性连接起来的一串对象.__pro ...
- 【Infragistics教程】在javascript构造函数中创建基本继承
2019独角兽企业重金招聘Python工程师标准>>> [下载Infragistics Ultimate最新版本] 用javascript创建对象有四种方法.具体如下: 对象作为文本 ...
最新文章
- win10蓝屏问题,关于驱动kisSaasUrlRedirectKnl64.sys 的
- python中*args 与 **kwargs形式的参数的用法详解
- 微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案...
- 快手小店电脑版_微信PC版更新!支持在小程序中使用微信支付 | 一周资讯
- VS2010建立Windows服务项目时的一些问题
- [分享] 精神崩溃的老鼠
- 孕妇可以在计算机教室待吗,电脑对孕妇有辐射吗?孕妇使用电脑的注意事项
- Linux 设备驱动的并发控制
- 理性分散投资 收益袋袋平安
- 我的AI之路 —— 从裸机搭建GPU版本的深度学习环境
- [深度学习-原理]GAN(生成对抗网络)的简单介绍
- TP5.1中的验证类 validate用法
- windows如何解压tar.gz文件
- 利用谷歌浏览器模拟网速慢的情况
- matlab中累乘,numpy中的裁剪、压缩和累乘
- 生活是艰难的,我又划着我的断桨出发了
- 如何利用计算机打印较大的字,Word打印技巧:打印大字-word技巧-电脑技巧收藏家...
- Protobuf 在 Ubuntu18 下的安装和使用
- Linux系统下7个好用的PDF编辑器推荐
- python画饼图柱状图_荐【python数据分析(24)】Matplotlib库基本图形绘制(1)(线形图、柱状图、堆叠图、面积图、填图、饼图)...