zoukankan      html  css  js  c++  java
  • JavaScript 属性和方法的类型

    JavaScript里,对象的方法和属性支持4种不同的类型

    1.私有类型
       对外界完全不具有访问性

    function MyClass(){
       var elements = []; //私有成员,在对象外无法访问
        elements = Array.apply(elements, arguments);
    }
       只有通过特定的getter和setter才能访问
     

    2.动态公有类型
      外界可以访问,每个对象实例持有一个副本,它们之间不会相互影响

    function MyClass(){
       var elements = []; //私有成员,在对象外无法访问 
    elements = Array.apply(elements, arguments);
    //公有属性,可以通过“.”运算符或下标来访问
    //this.length是私有成员elements是的length属性的getter
        this.length = {
            valueOf: function(){return elements.length;},
            toString: function(){return elements.length;}
        }
    }
    

    3.静态公有类型
       也叫原型属性,它的特点是所有对象实例共享唯一副本,对它的改写会相互影响

    MyClass.prototype.x = 20; //原型属性

    4.类属性
       作为类型的属性,而不是对象实例的属性,在没有构造对象时可以访问

    MyClass.y = 30; //类属性
    

    例子:

    <html>
    <head></head>
    <body>  
    <script language="javascript" type="text/javascript">  
    <!--
        function dwn(s)
        {
            document.write(s + "<br/>");
        }
        function MyClass()
        {
            var p = 100;  //private property; 私有属性
            this.x = 10;  //dynamic public property 动态公有属性
        }
        MyClass.prototype.y = 20; // 原型属性
        MyClass.z = 30;  //static property //类属性
    
        var a = new MyClass();
        dwn(a.p);  //undefined 私有属性对象无法访问到
        dwn(a.x);   //10  公有属性
        dwn(a.y);   //20  公有属性
        a.x = 20;
        a.y = 40;
        dwn(a.x);    //20  
        dwn(a.y);    //40  //动态公有属性y覆盖了原型属性y
        delete(a.x);
        delete(a.y);
        dwn(a.x);    //undefined  动态公有属性x被删除后不存在
        dwn(a.y);    //20  动态公有属性y被删除后还原为原型属性y
        dwn(a.z);    //undefined 类属性无法通过对象访问
        dwn(MyClass.z);  //30 类属性应该通过类访问
    -->
    </script>  
    </body>   
    </html>
        结果:  

        undefined
        10
        20
        20
        40
        undefined
        20
        undefined
        30

  • 相关阅读:
    JS通过组装key值访问json对象中的值
    js属性对象的hasOwnProperty方法
    ES6 去掉已经 new Date().format 方法
    Ajax不能接受php return值的原因
    CentOS最常用命令及快捷键整理
    js中for循环中需要调用异步方法,怎么确保执行的顺序?
    MYSQL 更新字段,向字段追加字符串
    java-学习2
    java-学习1
    JS----贪吃蛇游戏
  • 原文地址:https://www.cnblogs.com/IsDotNet/p/1501434.html
Copyright © 2011-2022 走看看