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. 运用java反射

    Class类 要正确使用Java反射机制就得使用java.lang.Class这个类.它是Java反射机制的起源.当一个类被加载以后,Java虚拟机就会自动产生一个Class对象.通过这个Class对 ...

  2. 数据库-mysql事务

    MySQL 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数 ...

  3. webpack3学习笔记

    地址:https://segmentfault.com/a/1190000006843916 地址:https://www.chungold.com/my/course/32 地址:http://js ...

  4. java基础67 JavaScript通过关系找节点、添加附件(网页知识)

    1.通过关系找节点(父子关系,兄弟关系) 1.1.常用方法 parentNode:获取当前元素的父节点.    childNodes:获取当前元素的所有下一级子元素    firstChild:获取当 ...

  5. 关于SizeOf、Length

    结论: 到底什么时候用Length,SizeOf呢,我总结下使用Length,Sizeof的场景 1.Length(静态数组或动态数组)----没有问题 2.Length(string/shortst ...

  6. C++11之auto和decltype

    auto自动类型推断,用于从初始表达式中推断出变量的类型. auto a;// 错误,没有初始化表达式,无法推断出a的类型 autoint a =10;// 错误,auto临时变量的语义在C++ 11 ...

  7. 20155225 2016-2017-2《Java程序设计》课程总结

    20155225 2016-2017-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:新的开始 预备作业2:C语言学习回顾 预备作业3:Linux基础入门和虚拟机的安装 第一 ...

  8. c 语言文本文件判断是否到达结尾的问题

    在c语言中,判断文件结尾有两种方法,第一种是使用feof()函数,feof(fp)用于测试fp所指向的文件的当前状态是否为“文件结束”.如果是,函数则返回的是非0值(真),否则为0(假),要注意的是, ...

  9. 题解-python-CodeForces 1A

    A. Theatre Square time limit per test 2 seconds memory limit per test 64 megabytes input standard in ...

  10. 32 从1到n整数中1出现的次数

    输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数. 主要思路:设定整数点(如1.10.100等等)作为位置点i(对应n的各位.十位.百位等等),分别对每个数位上有多少包含1的点进行分析 ...