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  -->系统自定义类

思考题3:

扩展数字类的功能:

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

二、Object类的使用

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

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

function Person(){

}

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

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

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

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

如,Object类下有一个方法:

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

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

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

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

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

语法:类名.属性名

如:

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

四、模拟类的私有属性

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

语法:

function Person(p_name){

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

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

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

//构造函数传参

}

五、模拟类的继承功能

l 语法:

Object.prototype.ext=function(parObject){

for(var i in parObject){

this[i]=parObject[i];

}

};

什么情况下使用继承?

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

举例:

Function Person()

{

This.name

This.age

This.say=function

}

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

六、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){

}

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

Throw语句

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

八、关于调试

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

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

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

九、JavaScript作用域链

js面向对象编程-高级内容的更多相关文章

  1. 带你一分钟理解闭包--js面向对象编程

    上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...

  2. 大数据技术之_16_Scala学习_06_面向对象编程-高级+隐式转换和隐式值

    第八章 面向对象编程-高级8.1 静态属性和静态方法8.1.1 静态属性-提出问题8.1.2 基本介绍8.1.3 伴生对象的快速入门8.1.4 伴生对象的小结8.1.5 最佳实践-使用伴生对象解决小孩 ...

  3. Js面向对象编程

    Js面向对象编程 1.     什么是面向对象编程? 我也不说不清楚什么是面向对象,反正就那么回事吧. 编程有时候是一件很快乐的事,写一些小游戏,用编程的方式玩游戏等等 2.     Js如何定义一个 ...

  4. js原生设计模式——3简单工厂模式\js面向对象编程实例

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  5. JS面向对象编程(进阶理解)

    JS 面向对象编程 如何创建JS对象 JSON语法声明对象(直接量声明对象) var obj = {}; 使用 Object 创建对象 var obj = new Object(); JS对象可以后期 ...

  6. 页面循环绑定(变量污染问题),js面向对象编程(对象属性增删改查),js字符串操作,js数组操作

    页面循环绑定(变量污染问题) var lis = document.querySelectorAll(".ul li") for ( var i = 0 ; i < lis. ...

  7. js面向对象编程 ---- 系列教程

    原 js面向对象编程:数据的缓存 原 js面向对象编程:如何检测对象类型 原 js面向对象编程:if中可以使用那些作为判断条件呢? 原 js面向对象编程:this到底代表什么?第二篇 原 js面向对象 ...

  8. 简单粗暴地理解js原型链–js面向对象编程

    简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...

  9. JS面向对象编程,对象,属性,方法。

    document.write('<script type="text/javascript" src="http://api.map.baidu.com/api?v ...

随机推荐

  1. 使用postman做接口测试(三)

    三,接口用例的设计 个人感觉用例的设计才是重要的哈,网上查了一些资料总结了一下 1.业务流程测试 通过性验证: 1, 按照接口文档上的参数,正常传参,是否可以返回正确的结果 2, 是否满足前提条件,比 ...

  2. Python访问MySQL(1):初步使用PyMySQL包

    Windows 10家庭中文版,MySQL 5.7.20 for Win 64,Python 3.6.4,PyMySQL 0.8.1,2018-05-08 ---- 使用Python访问MySQL数据 ...

  3. UFLDL 教程学习笔记(二)

    课程链接:http://ufldl.stanford.edu/tutorial/supervised/LogisticRegression/ 这一节主要讲的是梯度的概念,在实验部分,比较之前的线性回归 ...

  4. MySQL基础 - Navicat及HeidiSQL可视化数据库管理工具

    你还在使用终端界面查看数据库吗?是的,用来用去还是觉得命令行好用.....这里先留个位子,改天再介绍下这俩工具的使用,虽然好像觉得没啥需要介绍的.

  5. AdvStringGrid 复选框、goRowSelect

    var I: Integer; begin do begin AdvStringGrid1.AddCheckBox(, I, True, True); AdvStringGrid1.Cells[,I] ...

  6. 查找sqlserver数据库中,查询某值所表名和字段名

    有时候我们想通过一个值知道这个值来自数据库的哪个表以及哪个字段,通过一个存储过程实现的.只需要传入一个想要查找的值,即可查询出这个值所在的表和字段名. 前提是要将这个存储过程放在所查询的数据库. CR ...

  7. SQLSERVER 2008 编辑所有或者任意行

    选中表 右键选择“编辑前200行”,然后选择左上角的 sql图标,然后在右侧的SQL语句去掉 top 200 然后执行查询 就可以编辑所有的行了,可以选择自己需要写SQL,然后查询编辑. 第二种方法: ...

  8. 关于Fuzz——peach的学习

    最近在搞漏洞挖掘,之前写过一个文件格式漏洞挖掘的博文,使用的是光刃牛写的Alpha Fuzz工具.感觉样本生成的质量不是很好,这次打算使用一下老牌的Fuzz工具peach.学长介绍了一下说peach的 ...

  9. IdentityServer4揭秘---登录

    IdentityServer4默认提供了的登录地址是Account/Index 同意页面是Consent/Index 这里我们可以通过IdentittyServer4的用户交互自定义配置设置 在Con ...

  10. 一步一步学习IdentityServer3 (6)

    上一个章节提到了数据持久化 下面说一说自定义登录界面,Idr3提供了很多服务接口,其中一个就是 ViewService,我们只需要去注册 IViewService 这个接口的实现 提供了一个泛型视图服 ...