javascript 原型链继承方式的解析

本文详细解析了JavaScript中利用原型链实现继承的过程及原理,包括子类如何继承父类的方法和属性,以及如何避免实例属性和方法的混淆。通过实例代码演示,深入理解JavaScript继承机制。

在面向对象语言中,继承有两种形式:1.接口继承; 2.实现继承。在js中只有实现继承。

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

代码如下:

  function superClass (){
        this.property1 = true;
    }  
    superClass.prototype.method1 = function (){
        console.log("superClass method1");
    }
    superClass.prototype.method2 = function (){
        console.log("superClass method2");
    }
    function subClass (){
        this.property2 = false;
    }
    subClass.prototype = new superClass();
    subClass.prototype.method1 = function (){
        console.log("subClass method1");
    }
    subClass.prototype.method3 = function () {
        console.log("subClass method3");
    }
    var superclass = new superClass ();
    superclass.method1();                        //superClass method1
    superclass.method2();                        //superClass method2
    var subclass = new subClass ();
    subclass.method1();                          //subClass method1
    subclass.method2();                          //superClass method2
    subclass.method3();                          //subClass method3 

 

上面的例子中subClass继承了superClass中的method1 和method2 两个方法,并且重写了method1方法。增加了自己的method3 方法。

 

subClass 继承的时候其实是重写了原型对象,使prototype指向了superClass 的一个实例。

 

原来存在与superclass的实例中的属性和方法,现在也存在与subClass.prototype中。
 即:原来在superClass中为实例属性和方法,现在为subClass中为原型属性和方法。

 

他们的关系如图:

 

上面的代码我们并没有使用 subClass 默认提供的原型,而是给它换成了一个新的原型。这个原型就是 superClass 的一个实例。

于是新的原型就有了 superClass 的实例所拥有的所有的属性和方法。而且内部还有一个指针指向了superClass 的原型。

最终的结果是:subclass 指向了 subClass 的原型,subClass 的原型指向了 superClass 的原型。 method2 方法还是存在于 superClass 方法中。但是 property1 存在于 subClass.prototype 中。这是因为 property1 是一个实例属性而 method2 为原型方法。

 

在 superClass 中的 method1 不能被 subclass 访问到,是因为原型的搜索机制导致的。

原型机制的搜索机制为:每当读取某个对象的属性或者方法的时候,都会先搜索实例中是否有该属性或者方法,如果没有继续搜索原型中的属性或者方法,如果还是没有则继续向下搜索,直到 Object。所以 subClass.prototype 中的 method1 覆盖了 superClass.prototype 中的 method1 。

 

原型链的问题:

    在原型链中出现了一个问题,就是本来在父类中为实例属性和方法,在继承类中却变成了原型属性和方法。例如上面的property1。

    解决这个问题需要使用原型链和构造函数组合的办法,即组合继承或者伪经典继承。

 

 

 

 

 

 

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值