美文网首页
00004.js对象的属性,prototype作用范围测试

00004.js对象的属性,prototype作用范围测试

作者: 笑着字太黑 | 来源:发表于2022-02-17 12:14 被阅读0次

    JS中通过prototype可以给函数对象追加属性与方法,
    这种做法是在其他语言里面没有见过的,很有趣,
    顺便调查学习一下与其他几种赋值方式的比较结果。
    Obj.prototype.fn3=function(){};

    <!DOCTYPE html>
    <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
      <title>js对象的属性,prototype作用范围测试</title>
    </head>
    <body>
    </body>
    </html>
    <script type="text/javascript">
      function Obj(arg){
        /*第1种:函数体内变量,外部不可见*/
        var a = arg;
        var fn=function(){};
    
        /*第2种:对象实例可见,相当于对象的public property*/
        this.b=arg;
        this.fn1=function(){};
      }
    
      /*第3种:Java中没有类似的东西,只能通过Obj.x访问*/
      Obj.c=1;
      Obj.fn2=function(){};
    
      /*第4种:对象实例可见,与第2种类似,属性名与第二种设定名重复时,取得的是第二种方法的设定值,原理不明*/
      Obj.prototype.d=11;
      Obj.prototype.fn3=function(){};
    
    /************************************************/
      console.group('Obj');
      //undefined
      console.log("Obj.a = "+Obj.a);
      console.log("Obj.fn = "+Obj.fn);
      
      //undefined
      console.log("Obj.b = "+ Obj.b);
      console.log("Obj.fn1 = "+ Obj.fn1);
      
      //OK
      console.log("Obj.c = "+ Obj.c);
      console.log("Obj.fn2 = "+Obj.fn2);
    
      //undefined
      console.log("Obj.d = "+ Obj.d);
      console.log("Obj.fn3 = "+Obj.fn3);
      console.groupEnd();
    
      var A = new Obj(22);
      console.group('new Obj');
      //undefined
      console.log("A.a = "+A.a);
      console.log("A.fn = " +A.fn);
    
      //OK
      console.log("A.b = "+ A.b);
      console.log("A.fn1 = "+A.fn1);
    
      //undefined
      console.log("A.c = "+A.c);
      console.log("A.fn2 = "+A.fn2);
    
      //OK
      console.log("A.d = "+A.d);
      console.log("A.fn3 = "+A.fn3);
      console.groupEnd();
    </script>
    

    相关文章

      网友评论

          本文标题:00004.js对象的属性,prototype作用范围测试

          本文链接:https://www.haomeiwen.com/subject/naxllrtx.html