《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 安装并启动 ...
随机推荐
- Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)的解决方法
在连接数据库时,报这个错误,是/var/lib/mysql/ 目录下没有mysql.sock文件,在服务器搜索myslq.sock文件,我的是在/tmp/mysql.sock 解决方法是加一个软链: ...
- Elasticsearch 5.0 磁盘空间节省策略的认识
前言:本文是当时QQ群员讨论磁盘空间如何优化,我搜了下类似的文章,结合官方文档做了一些总结 参考文章1 参考文章2 如果你有疑问,可以联系我参与讨论,或者去原文查看. NOTE: 磁盘空间节省问题,是 ...
- 【51Nod】1005 大数加法
给出2个大整数A,B,计算A+B的结果. Input 第1行:大数A 第2行:大数B (A,B的长度 <= 10000 需注意:A B有可能为负数) Output 输出A + B Input示例 ...
- sellenium页面元素的定位方法
1.findElements函数可用于多个元素定位 (1)使用ID定位:driver.findElement(By.id("ID值")); 例:HTML代码: 定位语句代码:Web ...
- 采用rest接口对接而非webservice
代码示例 public static String queryForCTI(String url){ String targetURL = getCTIurl()+"/"+url; ...
- C# winform调用东软动态库的问题
在C# winform程序中调用东软的动态库ESActiveX.ocx 如果是引用ESActiveX.ocx,然后在代码中设置示例,调用就会报"灾难性错误" 如果在工具箱中点击右键 ...
- 记JavaScript的入门学习(一)
2016年11月20日算是每天都会利用点时间去思考,去学习,接下来便是我学习JavaScript的前前后后,希望早日学完JavaScript和jQuery 之前学校毕业设计选择了一个如下图的题目 希望 ...
- Linux双网卡NAT共享上网
linux双网卡NAT共享上网 术语字汇 私有IP地址(路由不可达地址)是一个被用于本地局域网的IP地址(在互联网中不可见). 公用IP地址(路由可达地址)是一个在互联网中可见的IP地址. IP伪装是 ...
- qwt的安装与使用
qwt简介 QWT,全称是Qt Widgets for Technical Applications,是一个基于LGPL版权协议的开源项目, 可生成各种统计图. 具体介绍,可参看官方网址:http:/ ...
- hdu1033
#include<stdio.h> #include<string.h> const int MAXN=200; char str[MAXN]; int main() { in ...