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. 05 Diagnostics 诊断

    Diagnostics 诊断 Introduction 介绍 Profiling 分析 Tracing 跟踪 Debugging 调试 Runtime statistics and events 运行 ...

  2. SQLite数据库初步

    Windows 10家庭中文版 想使用Python操作SQLite数据库,可是,不知道怎么建立数据库文件. 在SQLite官网溜达了一圈,总算使用上面的工具安装了建立了我需要的数据库文件. 1.进入官 ...

  3. NVME SSD vs SATA SSD(转)

    NVMe是个啥?未来SSD主流标准早知 关注固态硬盘的朋友应该对于这个词汇并不陌生,特别是今年NVMe也频繁出现在各大媒体文章中,随着高端SSD市场逐渐从SATA专项PCI-E时,以前的AHCI标准已 ...

  4. python基础-类的其他方法

    一.isinstance(obj,cls)检查是否obj是类的cls对象 # -*- coding:utf-8 -*- __author__ = 'shisanjun' class Foo(objec ...

  5. android studio实现Intent通信-------牛刀小试

    概述: 本博文实现一种小程序,两个Activity单向通信,主从关系,MainActivty 页面布局一个EditText+Button,实现逻辑是单击按钮将信息发送给另外一个DisplayMessa ...

  6. 旁门左道通过JS与纯CSS实现显示隐藏层

    想必大家在开发前端页面时,肯定少不了显示隐藏层这一技术点.那么我简单粗暴地总结了以下两个小demo. 要实现该截图的功能:鼠标移动到我的好友这个选项卡时,灰色的隐藏层就会出现.

  7. Mysql远程连接报错:SQL Error (1130): Host '192.168.61.128' is not allowed to connect to this MySQL server

    Mysql远程连接报错:SQL Error (1130): Host '192.168.0.18' is not allowed to connect to this MySQL server     ...

  8. mysql索引之三:索引使用注意规则(索引失效--存在索引但不使用索引)*

    使用索引时,有以下一些技巧和注意事项: (1)越小的数据类型通常更好:越小的数据类型通常在磁盘.内存和CPU缓存中都需要更少的空间,处理起来更快.(2)简单的数据类型更好:整型数据比起字符,处理开销更 ...

  9. [转]kali中eth0网卡突然消失解决方案

    前言 不知道怎么kali的eth0网卡突然消失了.这可有点难受啊.在网上查找了一番找到了解决办法,特此记录. 问题   怎么办? 解决办法 首先使用ifconfig -a命令查看所有的网卡接口  发现 ...

  10. [flask]flask_login模块,session及其他

    读flask源码的时候,有一点一直到现在都没有一个清晰的概念,比如四个全局变量g,current_app,session,request是怎么做到的 按照查到的资料里面的说法,为了不至于每次都主动调用 ...