zoukankan      html  css  js  c++  java
  • js

    静态成员,静态类
    因为某些对象的特定行为是不变的(如math类里面的方法只有一种运算,月亮只有一个)所以无需实例化就可以直接调用
    注意
    允许在同一类中定义同名的静态属性和实例属性
    不能再静态方法中使用this关键字,所以静态方法只能访问静态属性,静态方法也不能被继承
    如果一个类中的成员全部是静态成员,那么就可以说该类为静态类
    静态方法只能访问静态属性,不能访问实例属性。
    静态成员最常用的功能就是创建枚举

    创建静态成员
    如果想把成员声明为静态的,只需将属性或者方法赋给类本身,就可以直接使用类无需创建实例就可以访问showInfo 和sex属性了,这两个成员都是静态成员
    function Person(myName ,myAge){
    this.name = myName;
    this.age= myAge;
    }
    Person.showInfo = function(){
    return();
    };
    Person.sex= "男";
    静态成员的一种用途是保留有关类及其实例的状态信息,仅初始化一次。
    function Count(){
    document.write();
    Count.i++;
    }
    Count.i=0;
    初始化为0以后每次调用就会加一

    静态成员不能被继承,可以传播到当前类的子类,在子类体中,不必引用在其中定义静态属性或方法的类,就可以使用静态属性或方法
    使用静态成员的注意事项
    js允许在同一类中定义同名的静态属性和实例属性
    function Count(){
    this.i=1;
    }
    Count.i=0;
    document.write("Count静态属性:"+Count.i);//输出0
    var ocount= new Count();
    document.write("Count实例属性:"+Count.i);//输出1


    多态-----重载和覆载
    js不支持直接定义多个方法来实现重载,因为它不允许存在同名的两个方法。用户可以利用变参数来实现重载功能,
    function Over(){}
    Over.prototype.myMethod= function(){
    var len= arguments.length;
    if(len==2){
    document.write();
    }else if(len==3){
    document.write();
    }else{
    throw new Error();
    }
    };
    try{
    var oOver= new Over();
    oOver.myMethod(1,2);
    oOver.myMethod(1,2,3);
    }catch(err){
    document.write(err.message);
    }
    定义了一个类,事项了一个名为myMethod的方法,通过自行判断参数的数量实现重载

    方法的覆载
    从基类中继承功能时,子类可以继承基类的所有方法和属性,有时子类需要实现新的功能,可以在新类中覆盖基类的方法,
    无需使用新的名称,只需为子类新定义一个同名的方法成员就可以

    原型链本质论
    每个类都有一个prototype属性,这是一个静态属性,该属性值包含了标识该类的一个对象,这个对象称为原型对象
    在原型对象上定义了一些内部属性用于描述该类,其中就包含该类的基类的信息,通过信息【Prototype】,js解释引擎就可以知道该类的基类,同理基类也是一样,
    就会建立起一个链条
    在原型对象上定义了一些内部属性【Prototype】(的值为null)用于描述该类,其中就包含该类的基类的信息

    当一个类定义是,它有原型对象,原型对象必须声明有多个内部特定的属性【Prototype】和【class】,作为类的特性
    内部属性
    【Prototype】属性表示该类的父类是原型对象,一般使用_proto_来访问
    【class】"Arguments","Array"

    Child是Person是的子类
    function Person(){}
    function Child(){}
    Child.prototype = new Person();

    Person.prototype._proto ===Object.prototype;
    Child.prototype._proto_ ===object.prototype;//不继承类Person时成立
    如果继承了原型链就会下移
    Child.Prototype._proto_._proto_ ===Object.prototype



    111111
  • 相关阅读:
    32位和64位系统区别及int字节数
    c语言指针占几个字节
    可重入和不可重入
    C中的volatile用法
    让你分分钟读懂CPU架构及芯片厂商
    手机CPU知识扫盲:谈谈手机CPU架构与原理 (全
    IO端口、IO内存、IO空间、内存空间的含义和联系
    IO端口和IO内存的区别及分别使用的函数接口
    linux终端下 编译c语言程序
    git各种撤销操作
  • 原文地址:https://www.cnblogs.com/whl4835349/p/5058784.html
Copyright © 2011-2022 走看看