zoukankan      html  css  js  c++  java
  • call 和apply 的一个记录

    <!doctype html>
    <html>
     <head>
      <title> call - apply for inherit </title>
     </head>
    
     <body>
      <script type="text/javascript">
       function baseA()  // base Class A
       {
        this.member = "baseA member";
        this.showSelfA = function()
        {
         window.alert(this.member);
        }
       }
    
       function baseB()  // base Class B
       {
        this.member = "baseB member";
        this.showSelfB = function()
        {
         window.alert(this.member);
        }
       }
    
       function extendAB()  // Inherit Class from A and B
       {
        baseA.call(this); // call for A
        baseB.call(this); // call for B
       }
    
       window.onload = function()
       {
        var extend = new extendAB(); 
        extend.showSelfA();  // show A
        extend.showSelfB();  // show B
       }
      </script>
     </body>
    </html>

    运行结果如下:

    baseB member
    baseB member

    测试环境:Google Chrome 

    结果分析:

    预期的结果,应该是输出 baseA member 和 baseB member,但实际输出却是 baseB member 和 baseB member

    以这种方式去实现所谓的多继承,结果:相同的变量会被覆盖;

    当然,我们也可以对上面baseA代码稍作修改,来验证我们调试分析的正确性:

    function baseA()  // base Class A
    {
     this.memberA = "baseA member";   // member改成memberA,以区分baseB中的member
     this.showSelfA = function()
     {
      window.alert(this.memberA);    // 显示memberA
     }
    }
  • 相关阅读:
    jQuery和AngularJS的区别小分析
    Angular.element和$document的使用方法分析,代替jquery
    AngularJS中bootstrap启动
    angular 依赖注入原理
    AngularJS介绍
    箭头函数
    Object.create 函数 (JavaScript)
    forEach 方法 (Array) (JavaScript)
    Petapoco 查询 语法
    C# 方法中带默认值的参数
  • 原文地址:https://www.cnblogs.com/mc67/p/5004755.html
Copyright © 2011-2022 走看看