js面向对象编程-高级内容


JavaScript面向对象

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

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

  • prototype的使用

格式:class.prototype

场景:

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

FunctionPerson(name1,age1){

This.name=name1;

This.age=age1;

}

Varp1=newPerson(‘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-->系统自定义类

思考题3:

扩展数字类的功能:

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

二、Object类的使用

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

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

functionPerson(){

}

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

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

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

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

如,Object类下有一个方法:

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

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

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

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

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

语法:类名.属性名

如:

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

四、模拟类的私有属性

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

语法:

functionPerson(p_name){

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

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

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

//构造函数传参

}

五、模拟类的继承功能

l语法:

Object.prototype.ext=function(parObject){

for(variinparObject){

this[i]=parObject[i];

}

};

什么情况下使用继承?

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

举例:

FunctionPerson()

{

This.name

This.age

This.say=function

}

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

六、javascript闭包

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

什么时候用闭包

想访问函数内部的变量时

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

functiontest1(){

i=100;

functiontest2(){

alert(i++);

}

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

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

}

varresult=test1();

result();

七、try…catch语句

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

语法:

try{

//要执行的语句

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

}

catch(error){

}

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

Throw语句

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

八、关于调试

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

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

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

九、JavaScript作用域链

优质内容筛选与推荐>>
1、Oracl 10G与sql server2005搜索运行时间测试
2、【测试的艺术】+用例
3、CentOS 安装lsof命令
4、Dota之------灵魂守卫的使用
5、Spring Cloud Config—服务器


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号