javascript (对象继承)原型链

原创 2016年08月30日 17:39:33

Js所有的函数都有一个prototype属性,这个属性引用了一个对象,即原型对象,也简称原型。这个函数包括构造函数和普通函数.

JS中的继承,子函数通过把父函数实例化实现的。

如以下代码:
function SuperType111(){
    this.property=true;
}

SuperType111.prototype.getSuperValue = function(){
    return this.property;
};

function SubType222(){
    this.subproperty = false;
}

SubType222.prototype = new SuperType111();

SuperType111.prototype.getSubValue = function(){
    return this.subproperty;
};

var instance = new SubType222();

console.log(instance.getSuperValue());


instance 继承 了SubType222 ,SubType222集成父函数SuperType111

继承的原理:基于原型的搜索机制:当以读取模式访问一个实例属性时,首先会在实例中搜索该属性,如果没有找到该属性,则会继续搜索实例的原型。


而在以上用例得实际上,不是SubType222的原型constructor属性被重写了,而是SubType的原型指向了一个另外一个对象的SuperType的原型。

原型链的最末端是Object对象的原型对象。

因此,在原型链的关系中,可以说instance是Object,SuperType111 ,SubType222 任何一个类型的实例,用instanceof能判断。

值得注意的是:当子类型又需要重写超类中的某个方法,或者需要添加超类型中不存在的方法,添加方法的代码必须放在替换原型的语句之后。

原型链固然好用,可以用他来继承,但是也存在问题,就是如果子函数对其原型链上的属性进行修改的时候,会影响到超类型的属性,因为他们指针所指的地方是同一个。










版权声明:本文为原创文章,未经博主允许不得转载,欢迎各种交流,共同进步。

深入javascript面向对象,js的原型链、继承

进阶面向对象——————————————————————–在JS源码中,系统对象也是基于原型的程序, 尽量不要去添加和修改系统对象的方法 包装对象——————————————————————–基本类型...
  • u014420383
  • u014420383
  • 2015年08月15日 08:57
  • 1261

浅析JavaScript原型链与原型链式继承

原型链与原型链式继承上篇总结了下JavaScript的作用域链的问题,欢迎拍砖!浅析JavaScript作用域链继上篇总结中提出的情况 同样都是链,但这两个链往上追朔的顶点是不一样的;并且为了增强...
  • SirM2z
  • SirM2z
  • 2016年01月10日 20:44
  • 1102

深入理解JS继承和原型链

对于那些熟悉基于类的面向对象语言(Java 或者 C++)的开发者来说,JavaScript 的语法是比较怪异的,这是由于 JavaScript 是一门动态语言,而且它没有类的概念( ES6 新增了...
  • zls986992484
  • zls986992484
  • 2016年12月17日 11:18
  • 3014

JavaScript原型、闭包、继承和原型链等等总结

几年之前学习过Javascript,当时学得比较浅显,现在又开始学了,发现Javascript其实挺难的,有些地方还是得花时间去理解的,于是看了很多的视频和博客,自己在这里小小的总结下。。。 1.一切...
  • Ocean111best
  • Ocean111best
  • 2016年09月17日 21:10
  • 2091

Javascript继承(原型链)

Javascript继承(原型链)   继承是OO语言中的一个最为人津津乐道的概念。许多OO语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。由于...
  • Andy_java_
  • Andy_java_
  • 2016年10月28日 10:22
  • 371

浅谈JavaScript原型链继承方式与闭包

JavaScript中的继承方式有两种,一种是通过call或apply方法借用构造函数,另一种方法则是通过原型来继承。 这篇文章用于梳理自己关于prototype继承的知识点,也略微涉及一点点闭包的...
  • saturn4711
  • saturn4711
  • 2016年03月19日 11:33
  • 652

javascript中的对象详解,以及对象和原型链

除了5种基本类型外,JS中剩下的就是对象 (1)对象的定义:直接定义:var test={x:1,y:1}new方式创建:var test=new Object({x:1})Object.create...
  • liwusen
  • liwusen
  • 2016年06月11日 21:13
  • 1215

JavaScript采用对象冒充和原型链组合模式实现继承

定义基类Personfunction Person(name,age,hobby){ this.name=name; this.age = age; this.hobby = ...
  • song0511
  • song0511
  • 2015年12月20日 14:47
  • 349

javascript中的继承(JS基于原型链的继承),以及JS中的call和apply函数

继承是面向对象编程语言的一个重要特性,比如JAVA中,通过extend可以实现多继承,但是javascript中的继承方式跟JAVA中有很大的区别,JS中通过原型链的方式实现继承。...
  • liwusen
  • liwusen
  • 2016年03月07日 20:40
  • 1289

js继承 对象冒充和原型链继承

/*js中继承可以分为两种:对象冒充和原型链*/ 一、对象冒充 //1. 临时属性方式 function Person (name) { this.name = name; thi...
  • zsn851
  • zsn851
  • 2016年03月10日 16:10
  • 1766
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:javascript (对象继承)原型链
举报原因:
原因补充:

(最多只允许输入30个字)