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 ...
随机推荐
- Java不为人知的小秘密
Java中的main方法必须有一个外壳类,而且必须是静态的! Java中的所有函数都属于某个类的方法,所以main方法也不例外,必须放在一个类中才能编译运行. 例如: public class tex ...
- 一、springcloud服务注册、发现、调用(consul/eureka)
1.Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...
- Unix IPC之基于共享内存的计数器
目的 本文主要实现一个基于共享内存的计数器,通过父子进程对其访问. 本文程序需基于<<Unix网络编程-卷2>>的环境才能运行.程序中大写开头的函数为其小写同名函数的包裹函数, ...
- 入门ROS教程与视频汇总(kinetic)
参考网址: Richard Wang 3 Shawn Chen 部分视频网址: http://v.youku.com/v_show/id_XMjUxMTc5MzE5Mg http://i.you ...
- MS-SQL2005服务器登录名、角色、数据库用户、角色、架构的关系
MS SQL2005对2000进行了很大的改进,而用户关系这部分也变得相当复杂了,很多朋友都对此一知半解!下面,我将把我应用中总结的和大家分享下,先从概念入手,希望对不理解的朋友有点提示. 今天我们要 ...
- 《精通Python设计模式》学习结构型之代理模式
这种模式,总会让人想到SRPING中的AOP, 不同语言有不同的实现方式吧. class SensitiveInfo: def __init__(self): self.users = ['nick' ...
- 按书上学写测试pytest
慢慢的,这块知识也补好吧. 系统的学习框架,具体的细节,可以边百度边实现. test_three.py '''Test the Task data type.''' from collections ...
- 使用ngx_lua构建高并发应用
http://blog.csdn.net/chosen0ne/article/details/7304192
- 【Codechef】Random Number Generator(多项式除法)
题解 前置技能 1.多项式求逆 求\(f(x)\*g(x) \equiv 1 \pmod {x^{t}}\) 我们在t == 1时,有\(f[0] = frac{1}{g[0]}\) 之后呢,我们倍增 ...
- 2016-2017 ACM-ICPC Pacific Northwest Regional Contest (Div. 2) 题解
[题目链接] A - Alphabet 最长公共子序列.保留最长公共子序列,剩余的删除或者补足即可. #include <bits/stdc++.h> using namespace st ...