《JS中的面向对象技术》
内容要点:
1.什么是对象:JS权威指南学习总结-第六章 ,(有句话:一切都是对象)
2.什么面向对象
使用对象时,只关注对象提供的功能,不关注其内部细节,比如jQuery。面向对象是一种通用思想,并非只有编程中使用,任何事情都可以用。
3.JS中面向对象三大特征: 封装、继承、多态
4.JS自定义对象(三大对象两大属性):
4.1创建对象方式:方法1:对象初始化的方法,就是通过对象直接量创建的对象。方法2:通过关键字new和构造函数的方法创建对象
4.2对象属性定义:私有属性、对象属性、类属性
4.3对象方法定义:私有方法、对象方法、类方法
4.1创建对象的两种方法:
方法1:对象初始化的方法,就是通过对象直接量创建的对象。方法2:通过关键字new和构造函数的方法创建对象
方法1:通过对象初始化的方法创建对象:
var person={
name:"xingoo", //对象的属性
age:26,
//对象的方法:如果函数挂载在一个对象上,作为对象的一个属性,就称它为对象的方法
say:function(){ console.log("say something"); },
//当通过这个对象来调用函数时,该对象就是此次调用的上下文,也就是该函数的this的值。
action:function(){ console.log("do something");
}
};
console.log(person.name); //xinggo
console.log(person.age); //26
person.say();//say something
person.action(); //do something
方法二.通过构造函数创建对象:
function student(name,age){ //用于初始化一个新创建的对象的函数称为构造函数
this.name = name;
this.age = age;
this.say = function(){
console.log("say something");
}
this.action = function(){
console.log("do something");
}
}
var xingoo = new student("xingoo",27); //关键字new做了两件事情:帮助创建一个空白对象,并返回了这个对象
console.log(xingoo.name); //xingoo
console.log(xingoo.age); //27
xingoo.say(); //say something
xingoo.action(); //do something
4.2对象的属性:私有属性、对象属性、类属性;
对象属性需要创建对象后才能使用;
私有属性在内部可以直接使用,在外部需要通过闭包才能使用。
类属性可以通过对象名称直接使用。
function func(){
this.objPro1 = "对象属性";
func.prototype.objPro2 = "对象属性";
var privatePro = "私有属性";
}
func.classPro = "类属性";
console.log(func.classPro); //类属性
var f = new func();
console.log(f.objPro1);//对象属性
console.log(f.objPro2);//对象属性
<!-- 私有属性可以通过闭包获取 -->
4.3对象的方法:私有方法、对象方法、类方法
function demoFunc1(){
var privateFunc = function(){ console.log("this is privateFunc"); }; //私有方法
privateFunc();
this.objFunc1 = function(){ console.log("this is objFunc1"); };//对象方法
demoFunc1.prototype.objFunc2 = function(){ console.log("this is objFunc2"); };
}
demoFunc1.classFunc = function(){ console.log("this is classFunc"); };//类方法
demoFunc1.classFunc(); //this is classFunc
var f = new demoFunc1();//this is privateFunc
f.objFunc1();//this is objFunc1
f.objFunc2();//this is objFunc2
5.JS中面向对象三大特征: 封装、继承、多态
封装:不考虑内部实现,只考虑功能使用
继承:从已有的对象上继承出新的对象。注:apply()实现属性和方法的继承(8.7函数的方法),prototype实现原型的继承
多态:子类的方法会覆盖父类的方法,即表现出多态性。
继承特性:
function Animal(name,age){
this.name = name;
this.age =age;
this.say = function(){ console.log("animal say something"); }
}
function Cat(name,age){
Animal.apply(this,[name,age]);
}
<!-- Cat.prototype = new Animal();-->
var cat1 = new Cat("xingoo",3);
console.log(cat1.name);//xingoo
console.log(cat1.age); //3
cat1.say(); //animal say something
console.log(Cat.prototype); //原型是:Cat{},_proto_:Cat
如果开启注释的部分,可以发现,cat类的原型也变成了Animal。
多态特性:
子类的方法会覆盖父类的方法,即表现出多态性;注,在面向对象编程中,类B可以继承自另外一个类A,我们将A称为父类,将B称为子类。
function Pig(name,age){
this.say = function(){ console.log("i am pig"); }
}
Pig.prototype = new Animal();
function Dog(name,age){
this.say = function(){ console.log("i am dog"); }
}
Dog.prototype = new Animal();
function say(animal){
if(animal instanceof Animal){ animal.say(); }
}
var dog = new Dog();
var pig = new Pig();
say(dog); //i am dog
say(pig); //i am Pig
《JS中的面向对象技术》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- suse linux11 包括所有的linux操作系统的 遗忘root密码解决方案
2017-1-13号,用户要割接ocs系统应用,因为不能直接给root密码,但是操作过程中出现密码修改出错,再次登录系统仍然有问题.去机房熬了将近6个小时,试过单用户模式(但需要密码),试过光盘救援模 ...
- java转发和重定向
1,请求重定向:客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保持,地址栏的URL地址会改变.2,请求转发:服务器行为,request.ge ...
- 关于JAVA中split方法使用竖线异常的问题
split表达式,其实就是一个正则表达式. * ^ | 等符号在正则表达式中属于一种有特殊含义的字符,如果使用此种字符作为分隔符,必须使用转义符即\\加以转义.不然分割的结果就不是你想要的.
- python自动化开发-2
1.python的数据类型之列表 列表是Python开发语言中最常见的数据类型之一,通过列表可以实现对数据的增删改等常用操作. 列表的定义:例子 names = ["Lucy",& ...
- jQuery 之玩转 checkbox
<!DOCTYPE html> <html> <head> <title></title> <meta charset="u ...
- [coding horror] 1 - sum 2
sum 2 描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 对应每个测试案例,输出两个数,小的先输出. codi ...
- ios系统视频播放器MPMoviePlayerController应用遇到的坑
最近在做视频播放时应用系统MPMoviePlayerController播放器播放视频,发现点击快进快退会出现黑屏现象,并且点击完成按钮也不会返回,代码以及界面如下所示: NSURL *url=[se ...
- 用CSS实现文本框尖角
经常看到这样的尖角,以前不懂,以为都是用图片做出来的,后来惊奇的发现,原来很多都是用CSS做出来的,既美观又节省资源,真是两全其美啊! 那么,用CSS怎么实现这种效果呢?首先,来写一个简单的代码: & ...
- PDF在线阅读 FlexPaper 惰性加载 ;
关于PDF在线阅读问题,比较普遍的做法是转换成swf文件来浏览:由于项目需要,就用 flexpaper 来实现了下,功能比较简单:但是文件的惰性加载确实让笔者挠头了一把! 下面是笔者的方法: 采用流的 ...
- php强制下载文件并显示原始文件名
原来一直没有接触过,这几天一直在玩儿文件上传下载的东西.今天又遇到一个坑. 描述:文件上传至服务器后,如果是rar或则其他的非浏览器直接识别的格式,用户点击链接了后是可以直接就被下载下来的.那么如果上 ...