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

思考题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面向对象编程-高级内容的更多相关文章
- 带你一分钟理解闭包--js面向对象编程
上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...
- 大数据技术之_16_Scala学习_06_面向对象编程-高级+隐式转换和隐式值
第八章 面向对象编程-高级8.1 静态属性和静态方法8.1.1 静态属性-提出问题8.1.2 基本介绍8.1.3 伴生对象的快速入门8.1.4 伴生对象的小结8.1.5 最佳实践-使用伴生对象解决小孩 ...
- Js面向对象编程
Js面向对象编程 1. 什么是面向对象编程? 我也不说不清楚什么是面向对象,反正就那么回事吧. 编程有时候是一件很快乐的事,写一些小游戏,用编程的方式玩游戏等等 2. Js如何定义一个 ...
- js原生设计模式——3简单工厂模式\js面向对象编程实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- JS面向对象编程(进阶理解)
JS 面向对象编程 如何创建JS对象 JSON语法声明对象(直接量声明对象) var obj = {}; 使用 Object 创建对象 var obj = new Object(); JS对象可以后期 ...
- 页面循环绑定(变量污染问题),js面向对象编程(对象属性增删改查),js字符串操作,js数组操作
页面循环绑定(变量污染问题) var lis = document.querySelectorAll(".ul li") for ( var i = 0 ; i < lis. ...
- js面向对象编程 ---- 系列教程
原 js面向对象编程:数据的缓存 原 js面向对象编程:如何检测对象类型 原 js面向对象编程:if中可以使用那些作为判断条件呢? 原 js面向对象编程:this到底代表什么?第二篇 原 js面向对象 ...
- 简单粗暴地理解js原型链–js面向对象编程
简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...
- JS面向对象编程,对象,属性,方法。
document.write('<script type="text/javascript" src="http://api.map.baidu.com/api?v ...
随机推荐
- mysql中间件 -> Atlas简介&安装
Atlas简介 Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上, ...
- js对金额浮点数运算精度的处理方案
浮点数产生的原因 浮点数转二进制,会出现无限循环数,计算机又对无限循环小数进行舍入处理 js弱语言的解决方案 方法一: 指定要保留的小数位数(0.1+0.2).toFixed(1) = 0.3;这个方 ...
- MyEclipse中点击Deploy MyEclipse J2EE Project to Server无响应解决方法
问题: MyEclipse中点击Deploy MyEclipse J2EE Project to Server无响应 解决方法: 如果工作空间的问题,那么需要删除你工作空间的一个文件就可以解决了.这个 ...
- SQLAlchemy-对象关系教程ORM-一对多(外键),一对一,多对多
一:一对多 表示一对多的关系时,在子表类中通过 foreign key (外键)引用父表类,然后,在父表类中通过 relationship() 方法来引用子表的类. 在一对多的关系中建立双向的关系,这 ...
- 转:vue-cli的webpack模板项目配置文件分析
转载地址:http://blog.csdn.net/hongchh/article/details/55113751 一.文件结构 本文主要分析开发(dev)和构建(build)两个过程涉及到的文件, ...
- php 的swoole 和websocket 连接wss
1. 下载证书 $serv = new swoole_server('0.0.0.0', 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL); $s ...
- elasticsearch5.5-head
修改 elasticsearch/config/elasticsearch.yml 添加 http.cors.enabled: true http.cors.allow-origin: "* ...
- 聚类:(K-means)算法
1.归类: 聚类(clustering) 属于非监督学习 (unsupervised learning) 无类别标记(class label) 2.举例: 3. K-means 算法: ...
- PHP XML操作的各种方法解析
PHP提供了一整套的读取 XML文件的方法,很容易的就可以编写基于 XML的脚本程序.本章将要介绍 PHP与 XML的操作方法,并对几个常用的 XML类库做一些简要介绍. XML是一种流行的半结构化文 ...
- InterSystems Ensemble学习笔记(一) Ensemble介绍及安装
系列目录 InterSystems Ensemble学习笔记(一) Ensemble介绍及安装InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移 一 ...