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 ...
随机推荐
- Pytorch数据变换(Transform)
实例化数据库的时候,有一个可选的参数可以对数据进行转换,满足大多神经网络的要求输入固定尺寸的图片,因此要对原图进行Rescale或者Crop操作,然后返回的数据需要转换成Tensor如: import ...
- linux limits研究
---------------------------------------------------------------------------------------------------- ...
- python 之sqlite3库学习
# -*- coding:utf-8 -*- # 导入SQLite驱动:>>> import sqlite3# 连接到SQLite数据库# 数据库文件是test.db# 如果文件不存 ...
- 29 A Quick Guide to Go's Assembler 快速指南汇编程序:使用go语言的汇编器简介
A Quick Guide to Go's Assembler 快速指南汇编程序:使用go语言的汇编器简介 A Quick Guide to Go's Assembler Constants Symb ...
- iconfont-矢量图标字体
二.矢量图标使用 1.进入:http://www.iconfont.cn/ 搜索你图标的关键字,然后将需要的图标字体加入购物车 加入购物车之后,添加到项目 2.点击查看在线连接,生成css代码,把代 ...
- day08作业
1.A.在类中的位置不同 成员变量:在类中方法外 局部变量:在方法定义中或者方法声明上 B.在内存中的位置不同 成员变量:在堆内存(成员变量属于对象,对象进堆内存) 局部变量:在栈内存(局部变量属于方 ...
- SQLServer系统变量使用
1.@@IDENTITY返回最后插入的标识值.这个变量很有用,当你插入一行数据时,想同时获得该行的的ID(标示列),就可以用@@IDENTITY示例:下面的示例向带有标识列的表中插入一行,并用 @@I ...
- Linux 系统目录结构和常用指令
一.系统目录结构 /bin 经常使用的命令 /etc 所有系统管理所需的配置文件和子目录 /home 用户主目录 /usr 应用程序目录 /usr/bin 系统用户使用的应用程序 /usr/sbin ...
- MySQL约束笔记
MySQL 查看约束,添加约束,删除约束 添加列,修改列,删除列 · 查看表的字段信息:desc 表名; · 查看表的所有信息:show create table 表名; 添加主键约束:alter t ...
- Ubuntu 17.10开启 root 登陆
使用过 Ubuntu 的人都知道,Ubuntu 默认是不能以 root 登陆的,但是我们是不是就完全不能使用 root 进行登陆了呢?当然不是,只是我们需要做一些设置.而 Ubuntu 17.10 和 ...