原型链是实现继承的主要方法。基本思想:利用原型让一个引用类型继承另一个引用类型的属性和方法。

1.构造函数、原型、实例的关系:

每个构造函数都有原型属性(Prototype),指向一个原型对象(函数创建相应产生原型对象),每个原型对象包含一个属性(constructor),指向构造函数。每个实例都包含指向原型对象的内部指针(_proto_)。

如果令实例A的原型对象等于另一个构造函数的实例B,那么A的原型对象将包含指向B的原型对象的内部指针(_proto_),所以A可以继承来自B的原型对象中的属性和方法。相应的,B的原型对象也可以引用其他实例的原型对象(通过实例的赋值方法)。按照这种方法,一层层递进,可以构成实例和原型的链条(即原型链)。

注意一点:实例B的原型对象的构造器(constructor)属性是指向B的构造函数,而A的原型对象相当于引用B的原型对象,A的原型对象被重写!A的构造器属性指向B的构造函数。

最后,原型链的末端为Object的原型对象。因为一切都是对象,所有的函数都是Object的实例。

2.实现原型链的基本模型:

 function Supertype(){

     this.property=true;

 }
Supertype.prototype.getSuperValue=function(){
return this.property;
};
function SubType(){
this.subproperty=false;
}
SubType.prototype=new Supertype();
SubType.prototype.getSubValue=function(){
return this.subproperty;
};
var instance=new SubType();
console.log(instance.getSuperValue()); //true
console.log(instance.constructor);
//f Supertypr(){
this.property=true;
}
其中构造函数中的属性仅包含在实例对象中,不包含在它的原型对象中,原型对象中的属性和方法需要通过.prototype.name=value来进行添加。故,property位于Subtype.prototype中(将实例
后的对象赋给Subtype.prototype)而不在SuperType.prototype中
 function test1(){
this.swung=true;
}
const obj1=new test1();
test1.prototype.swingSword=function(){
return this.swung;
}
console.log(obj1.swingSword());
test1.prototype={
piece:function(){
return true;
}
};
console.log(obj1.swingSword());
const obj2=new test1();
console.log(obj2.piece());


继承 (js原型链)的更多相关文章

  1. JS面向对象(2) -- this的使用,对象之间的赋值,for...in语句,delete使用,成员方法,json对象的使用,prototype的使用,原型继承与原型链

    相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...

  2. js原型链与继承(初体验)

    js原型链与继承是js中的重点,所以我们通过以下三个例子来进行详细的讲解. 首先定义一个对象obj,该对象的原型为obj._proto_,我们可以用ES5中的getPrototypeOf这一方法来查询 ...

  3. 深入理解JS原型链与继承

    我 觉得阅读精彩的文章是提升自己最快的方法,而且我发现人在不同阶段看待同样的东西都会有不同的收获,有一天你看到一本好书或者好的文章,请记得收藏起来, 隔断时间再去看看,我想应该会有很大的收获.其实今天 ...

  4. js 原型链和继承(转)

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

  5. JS原型链与继承别再被问倒了

    原文:详解JS原型链与继承 摘自JavaScript高级程序设计: 继承是OO语言中的一个最为人津津乐道的概念.许多OO语言都支持两种继承方式: 接口继承 和 实现继承 .接口继承只继承方法签名,而实 ...

  6. JS对象继承与原型链

    1.以复制方式实现的继承 1.1浅拷贝 基本类型的复制 var parent = { lanage: "chinese" } var child = { name: "x ...

  7. js原型链理解(2)--原型链继承

    1.原型链继承 2.constructor stealing(构造借用) 3.组合继承 js中的原型链继承,运用的js原型链中的__proto__. function Super(){ this.se ...

  8. js 原型链与继承

    var A = function(){ this.name="xiaoming"; } A.prototype.age=9; var a = new A(); console.lo ...

  9. 【转】js原型链与继承

    原文链接:https://blog.csdn.net/u012468376/article/details/53127929 一.继承的概念 ​ 继承是所有的面向对象的语言最重要的特征之一.大部分的o ...

随机推荐

  1. iOS修改状态栏颜色

    application.statusBarStyle = .LightContent // 在APPlication中设置全局状态栏颜色,为白色 application.statusBarHidden ...

  2. Java8获取当前时间、新的时间日期类如Java8的LocalDate与Date相互转换、ZonedDateTime等常用操作包含多个使用示例、Java8时区ZoneId的使用方法、Java8时间字符串解析成类

     下面将依次介绍 Date转Java8时间类操作 ,Java8时间类LocalDate常用操作(如获得当前日期,两个日期相差多少天,下个星期的日期,下个月第一天等) 解析不同时间字符串成对应的Java ...

  3. 启动 idea 编译报错 kotlin

    怀疑是插件问题. 重新删除了.  C:\Users\user  里面inteliJIdea2018.3 缓存 ,解决

  4. soap 简单调用其他系统的函数

    <?xml version ='1.0' encoding ='UTF-8' ?> <definitions name='自定义名称' targetNamespace='目标命名空间 ...

  5. hive mysql 初始化

    原文链接:https://juejin.im/post/59c3f8f75188255be81f91d9#heading-17 Apache Hive-2.3.0 快速搭建与使用 Hive 简介 Hi ...

  6. javascript sourcemap

    [javascript sourcemap] 暂时只有Chrome浏览器支持这个功能.在Developer Tools的Setting设置中,确认选中"Enable JavaScript s ...

  7. 用PLSQL Developer 查看Oracle的存储过程

    1 2.输入 3.具体存储过程

  8. js实现简单拖拽效果

    方法如下: var params = { left: 0, top: 0, currentX: 0, currentY: 0, flag: false }; var getCss = function ...

  9. 树的子结构(python)

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) # -*- coding:utf-8 -*- # class TreeNode: # def __ ...

  10. Python_变量命名

    Python的变量命名 变量的命名的原则一直都是我这种小白的头疼事,好几条,根本记不住...... 为了解决大家的头疼问题,今天想出来一个好办法,那就是:身边常备头疼片.......(哈哈哈,开玩笑的 ...