博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript原型继承(1)
阅读量:4290 次
发布时间:2019-05-27

本文共 2174 字,大约阅读时间需要 7 分钟。

我们都知道构造函数、原型和实例之间的关系,如果我们让原型对象等于另一个类型的实例,结果会怎么样呢?显然此时的原型对象将包含一个指向另一个原型的指针,相应的另一个原型中也包含着一个指向另一个构造函数的指针

原型链

利用原型让一个引用类型继承另外一个引用类型的属性和方法

构造函数、原型对象和实例对象之间的关系:

  1. 构造函数.prototype = 原型对象
  2. 原型对象.constructor = 构造函数(模版)
  3. 原型对象.isPrototypeOf(实例对象) 判断实例对象的原型 是不是当前对象
  4. 构造函数 实例对象 (类和实例)
// 父类构造函数 supfunction Sup(name){
this.name = name; }// 父类的原型对象Sup.prototype = { constructor : Sup , sayName : function(){
alert(this.name); }};// 子类构造函数 subfunction Sub(age){
this.age = age ;}//如果我们让子类的原型对象 等于父类的实例 ,结果会怎么样呢?(实现了js的继承)//1 显然此时的原型对象将包含一个指向另一个原型的指针// sup的实例对象 和 sup的原型对象 有一个关系//2 相应的另一个原型中也包含着一个指向另一个构造函数的指针// 子类的原型对象的构造器变成了 父类的构造器Sub.prototype = new Sup('张三'); //alert(Sub.prototype.constructor);var sub1 = new Sub();//alert(sub1.name);sub1.sayName();

也就是子类的原型对象指向的是父类实例对象,这个父类实例对象和父类的原型对象也是有关系的(isPrototypeOf),因此子类实例对象可以通过这种继承直接使用父类原型对象中的属性和方法,同样构造方法内的一样可以直接使用。实例对象并没有.prototype的方法

原型继承

原型继承的特点:即继承了父类的模版,又继承了 父类的原型对象

// 父类function Person(name, age){
this.name = name ; this.age = age ;}// 父类的原型对象属性Person.prototype.id = 10 ;// 子类function Boy(sex){
this.sex = sex ; }//继承已经实现了 Boy.prototype = new Person('z3');var b = new Boy();alert(b.name); //z3alert(b.id); //10

这种方式的问题就是每次产生实例对象必须将需要的参数放到父类构造方法中来调用

类继承

类继承的特点:借用构造函数的方式继承。只继承模版,不继承原型对象

// 父类function Person(name, age){
this.name = name ; this.age = age ;}// 父类的原型对象属性Person.prototype.id = 10 ;// 子类function Boy(name , age , sex){
// call apply Person.call(this,name,age); this.sex = sex ; }var b = new Boy('张三' , 20 , '男');//alert(b.name); //张三//alert(b.age); //20//alert(b.sex); //男//alert(b.id); //父类的原型对象并没有继承

这种方式的继承并没有将父类中的原型对象的属性与方法继承过来

混合继承

混合继承的特点:原型继承+借用构造函数继承

// 父类function Person(name, age){
this.name = name ; this.age = age ;}// 父类的原型对象属性Person.prototype.id = 10 ;Person.prototype.sayName = function(){
alert(this.name);};// 子类function Boy(name , age , sex){
// call apply Person.call(this,name,age); // 1 借用构造函数继承 继承父类的模版 this.sex = sex ; } // 2 原型继承// 只剩下 父类的实例 和 父类的原型对象的关系了Boy.prototype = new Person(); //继承父类的原型对象var b = new Boy('李四' , 20 , '男');alert(b.name);alert(b.sex);b.sayName();

转载地址:http://ghrgi.baihongyu.com/

你可能感兴趣的文章
java基础知识(七)--Object类
查看>>
Object.prototype.toString_优就业
查看>>
JS之浏览器对象BOM
查看>>
分布式架构系列: 负载均衡技术详解
查看>>
python3安装scrapy
查看>>
python正则表达式入门一
查看>>
python正则表达式入门二
查看>>
scrapy运行
查看>>
XPATH入门
查看>>
python爬虫 CSS选择器
查看>>
正常关闭java程序
查看>>
查看linux核心数
查看>>
数据结构与算法三: 数组
查看>>
Activiti工作流会签二 启动流程
查看>>
Activiti工作流会签三 撤销,审批,驳回
查看>>
Oauth2方式实现单点登录
查看>>
CountDownLatch源码解析加流程图详解--AQS类注释翻译
查看>>
ES相关度评分
查看>>
我们一起做一个可以商用的springboot脚手架
查看>>
idea在搭建ssm框架时mybatis整合问题 无法找到mapper
查看>>