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
  • 相关阅读:
    流处理 —— Spark Streaming中的Window操作
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.8 提供带注解的限定符元数据
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.7 为自动检测组件提供作用域
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.6 给自动检测组件命名
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.5 在组件中定义bean的元数据
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.4 使用过滤器自定义扫描
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.3 自动检测类和注册bean的定义
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.2 元注解
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.1 @Component和深层的构造型注解
    Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10 类路径扫描和被管理的组件
  • 原文地址:https://www.cnblogs.com/gisblogs/p/4242327.html
Copyright © 2011-2022 走看看