js高级教程 第六章-面对对象的程序设计(四)
来源:互联网 发布:两年数据对比ppt 编辑:程序博客网 时间:2024/06/06 03:58
- 原型链
1.作用:实现继承的主要方法
2.基本思想:利用原型,让一个引用类型继承另一个引用类型。
3.概念:A构造函数都有一个A原型对象,A原型对象都包含一个指向构造函数的指针。而A实例有一个指向A原型对象的指针。如果A原型对象同时又是B类型的一个实例,那么A原型对象(B类型的一个实例)就有一个指向B类型的实例,依次类推,构成的原型与实例的链条就是原型链。
function SuperType(){ this.prototype = true;}SuperType.prototype.getSuperType = function(){ return this.prototype;}function SubType(){ this.subprototype = false;}// SubType的原型作为SuperType的实例来继承SuperType的方法SubType.prototype = new SuperType();// instance作为SubType的一个实例var instance = new SubType();alert(instance.getSuperType());
PS:现在的SubType的constructor指向的是SuperType
原型搜索机制:前面的章节又提到过原型的搜索机制,在以读取模式访问实例属性的时候,会按照实例-原型的顺序搜索。而使用原型链继承的情况是:实例-本身的原型-父类的原型(如果还有祖父类,曾祖父类则继续向上)
另一个层次的继承:上面的继承其实还包含一个默认的继承,那就是对于Object的继承,因此才会继承toString,valueOf这样的方法。这个继承的模型是这样的。
- 判断实例和原型的关系
1.使用instanceof
function SuperType(){ this.prototype = true;}SuperType.prototype.getSuperType = function(){ return this.prototype;}function SubType(){ this.subprototype = false;}// SubType的原型作为SuperType的实例来继承SuperType的方法SubType.prototype = new SuperType();// instance作为SubType的一个实例var instance = new SubType();alert(instance instanceof SubType);//truealert(instance instanceof SuperType);//truealert(instance instanceof Object);//true
2.使用isPrototypeOf
alert(SubType.prototype.isPrototypeOf(instance));//truealert(SuperType.prototype.isPrototypeOf(instance));//truealert(Object.prototype.isPrototypeOf(instance));//true
- 关于在子类型中定义方法的问题
原型添加的方法要在替换原型的语句后面
function SuperType(){ this.prototype = true;}SuperType.prototype.getSuperType = function(){ return this.prototype;}function SubType(){ this.subprototype = false;}// SubType的原型作为SuperType的实例来继承SuperType的方法SubType.prototype = new SuperType();// 一个添加的SubType方法SubType.prototype.getSubType = function(){ return 1;}// 重写的SuperType的方法,但是在SuperType本身中并没有改变SubType.prototype.getSuperType = function(){ return false;}// instance作为SubType的一个实例var instance = new SubType();alert(instance.getSuperType());//false
- 借用构造函数
1.基本思想:在子类型构造函数的内部调用超类型的构造函数。
2.方法:call或者apply实现
function superType(){ this.color = ['red','black'];}function subType(){ superType.call(this);}var instance1 = new subType();instance1.color.push('blue');alert(instance1.color);//red black bluevar instance2 = new subType();alert(instance2.color);//red black
虽然所有的实例拥有了超类型的superType,但是每个实例修改超类型产生的都是副本,不会对superType的color产生影响。
3.传递参数
借用构造函数的好处是可以向超类型传递参数。
function superType(name){ this.name = name;}function subType(){ superType.call(this,"halo"); this.age = 11;}var instance = new subType();alert(instance.name);//haloalert(instance.age);//11
阅读全文
0 0
- js高级教程 第六章-面对对象的程序设计(四)
- js高级教程 第六章-面对对象的程序设计(二)
- js高级教程 第六章-面对对象的程序设计(三)
- js高级教程 第六章-面向对象的程序设计(一)
- JavaScript高级程序设计笔记(四)面对对象
- javascript高级程序设计(第六章面向对象的程序设计)
- JS的面对对象教程
- 第六章 面向对象的程序设计 JavaScript高级程序设计
- 第六章 面向对象的程序设计(二) JavaScript高级程序设计
- JS中面对对象的程序设计
- JavaScript高级程序设计读书笔记(第六章)(四)
- 《JS高级程序设计》第6章读书笔记:继承对象(四)寄生组合式继承
- Javascript高级程序设计 第六章 --- 面向对象程序设计
- JavaScript高级程序设计 第六章 面向对象程序设计
- javascript高级程序设计第三版 第六章 面向对象的程序设计
- <JS高级程序设计>--对象
- 【javascript高级程序设计】读书摘录3 第六章、面向对象
- js高级程序设计(第6章---创建对象)
- 集训第二十三天(2017/8/22):树状数组和团队练习赛
- 【NYOJ
- 被我们忽视的自定义属性
- C\C++代码优化的27个建议
- StringBuffer与StringBuilder分析比较
- js高级教程 第六章-面对对象的程序设计(四)
- springmvc----源码分析之springmvc执行流程
- idea 上maven项目的创建以及部署到tomcat
- HDU 6081 度度熊的王国战略 堆优化Stoer-Wagner算法
- 算法竞赛入门经典 油田---经典的联通快问题
- iOS管理对象内存的数据结构以及操作算法--SideTables、RefcountMap、weak_table_t-二
- Java基础(三)数据类型与运算
- NYOJ 58 最少步数
- 多线程