zoukankan      html  css  js  c++  java
  • js面向对象编程-高级内容

    JavaScript面向对象

    一、为每个对象动态添加属性或方法

    功能:返回对象类型原型的引用 

    • prototype的使用 

    格式:class.prototype

    场景:

    比如说:A写了一个类,交给B,B在使用时发现A写的类的功能有所欠缺,但是B没有权力改写A的文件,这时该怎么办?

    Function Person(name1,age1){

    This.name=name1;

    This.age=age1;

    }

    Var p1=new Person(‘zhangsan’,30);

    p1.sex=’男’

    B认为这个类还应该有一个sex属性:

    function Preson(name,age){
          this.name=name;
          This.age=age;
           }
    var p1=new Person('zhangsan',30);
    var p2=new Person('lisi',20); //p2没有sex属性
    //以后每次实例化的person类对象都会自动拥有sex属性
    //即使是之前创建的person类对象也会自动拥有sex属性
     //为Person类添加了一个叫sex的成员属性
    Person.prototype.sex='男';
    Person.prototype.say=function(){ 
    //为Person类添加了一个say成员方法
    alert(this.name+this.age+this.sex);
        };

    在实际开发中,类内定义思考题1.:

    this.speak=function(){}与person.prototype.speak=function(){}有何区别?

    以上两种方法,最终都给Person类添加了一个叫speak的方法

    第一种:类内定义成员方法,所以使用这个类的程序,都会自动拥有该方法

    第二种:类外定义成员方法,只有当前应用程序可以使用speak方法

    思考题2.:

    l 扩展数组类的功能:

    为每一个数组对象添加一个方法,可以查找某个元素的所在位置

    Array  -->系统自定义类

    js面向对象

    思考题3:

    扩展数字类的功能:

    为一个数字对象添加一个方法,该方法的参数为任意数目的整数,然后将所有参数累加到一起,并返回

    javascript面向对象

    二、Object类的使用

    在Js中,Object是所有类的基类,使用Object类来创建自定义对象时,可以无需定义构造函数

    如:在以前,我们需要定义一个人,必须将人这个类定义出来

    function Person(){

    }

    但是,我们可以看出,这个类是空的,里面没有任何属性或方法,通常来讲

    这个类的对象一般属于和方法是后添加的

    既然这个类是空的,所以我们考虑使用Object类

    定义类对象时,不考虑类的类型,只需要存储多个数据,可以考虑使用Object类

    如,Object类下有一个方法:

    hasOwnProperty(property) ;判断对象下是否具有某个属性

    说明object类下的对象都有这个方法

    php教程

    #p#js教程-面向对象编程#e#

    三、javascript中模拟类的静态属性

    在有些面向对象的语言中,可以使用static关键字定义类的静态属性或方法,这一点,在JavaScript可以进行模拟。

    语法:类名.属性名

    如:

    Math.random(); //使用类名.形式调用的都是静态成员

    js面向对象编程
    php教程

    四、模拟类的私有属性

    • 在面向对象思想中,对于有些敏感的,不想公开的成员可以定义为私有的,在JavaScript中可以模拟这个功能。

    语法:

    function Person(p_name){

    var name = p_name; //在类内定义属性时前面加var表示私有的

    //私有成员不能在外面被访问

    //如果想设置私有成员属性值,可以通过

    //构造函数传参

    }

    js面向对象编程

    五、模拟类的继承功能

    l 语法:

    Object.prototype.ext=function(parObject){

    for(var i in parObject){

    this[i]=parObject[i];

    }

    };

    php学习

    什么情况下使用继承?

    有一个类,我们可以使用这个类,但这个类的功能不够完善,我们还不能修改它的源代码,所以需要在自己的类中继承这个类

    举例:

    Function Person()

    {

    This.name

    This.age

    This.say=function

    }

    但是,我们想完成对一个学生的描述,这时Person类里没有学号,所以我们要继承Person;

    php教程

    六、javascript闭包

    所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

    什么时候用闭包

    想访问函数内部的变量时

    让函数内部的变量始终保存在内存中

     function test1(){

      i=100;

      function test2(){

      alert(i++);

      }

    return test2;    返回test2函数的首地址给一个全局变量

      这里用到了变量i,所以i的值不会消失,这就是闭包

    }

     var result=test1();

     result();

    七、try…catch语句

    • 我们可以添加 try...catch 语句,这样当错误发生时可以采取更适当的措施。

    语法:

    try{

    //要执行的语句

    //当这些语句出现错误时,会被catch捕获,从而执行catch语句中指定的内容

    }

    catch(error){

    }

    php教程

    有时,我们可能故意让程序的catch语句运行

    Throw语句

    • throw 声明的作用是创建 exception(异常)。你可以把这个声明与 try...catch 声明配合使用,以达到控制程序流并产生精确错误消息的目的。
    php面向对象

    八、关于调试

    1) 设置断点:程序运行到这里会自动停止

    2) 使用逐语句:遇到函数时会进入到函数的内部

    3) 使用逐过程:遇到函数时,直接取函数的运行结果,而不是进入函数

    九、JavaScript作用域链

    php编程
    phpstar
  • 相关阅读:
    quratz数据存储
    quratz线程
    scheduler 基本原理
    一致性哈希算法
    高并发流量控制
    049 DSL语句
    048 SparkSQL自定义UDAF函数
    047 SparkSQL自定义UDF函数
    Quratz的理解
    046 SparlSQL中的函数
  • 原文地址:https://www.cnblogs.com/gisblogs/p/4242327.html
Copyright © 2011-2022 走看看