JS面向对象使用面向对象进行开发
面向对象基础一之初体验使用面向对象进行开发
对 JS 中的面向对象的基础进行讲述, 初体验使用面向对象进行开发
主要内容是
- 面向对象的概念及特性
- 用面向对象的方式解决简单的标签创建实例
一些基础的概念
面向对象
面向对象的概念
- 面向对象就是使用对象
- 面向对象开发就是使用对象开发
- 面向过程就是以过程的方式开发
- 面向对象是面向过程的封装
面向对象的特性
抽象性
如果需要用一对象来描述一个数据, 那就需要抽取这个对象的核心数据来描述
- 抽取需要的核心属性和方法
- 需要在特定情况下,才能明确对象的具体意义
封装性
封装就是将数据和功能组合到一起
- 在 js 中, 对象就是键和值的集合
- 键值如果是数据(基本数据, 复合数据, 空数据), 就称为属性
- 键值如果是函数,就称为方法
- 对象就是将属性和方法封装起来
- 方法是将过程封装起来
- 在 js 中, 对象就是键和值的集合
继承性
继承性就是自己没有, 别人有, 将别人的拿过来自己用, 并且成为自己的
- 传统继承基于模板
js 的继承基于对象
在 js 中的简单的继承模式: 混入模式(mix)
在 jQuerty 中的混入叫做: extendvar o1 = { name : 'Jhon' };
var o2 = { age : 19 };
function mix(o1,o2){
for(var key in o2){
o1[key] = o2[key];
}
}
mix(o1, o2);
使用面向过程和面向对象进行标签创建
使用面向过程创建div, 并设置样式
- 按部就班, 一步一步来
- 只能一个一个添加属性
如果创建多个div标签, 非常麻烦
var div = document.createElement('div');
documet.appendChild(div);
div.style.width = '200px';
div.style.height = '200px';
div.style.backgroundColor = 'red';
div.style.border = '10px dashed blue';
...
使用面向对象创建div, 并设置样式
- 抽取对象(名词提炼): div, body
分析属性和方法(动词提炼): appendChild, style
function DivTag(){
// 注意这里的 this 指的是 通过构造函数创建出来的实例对象
this.DOM = document.createElement('div');
appendTo : function(node){
// this是实例对象, 不是DOM节点, 不能直接使用DOM属性和方法
node.appendChild(this.DOM);
};
css : function(option){
for(var key in option){
this.DOM.style[key] = option[key];
}
}
}
var divTag = new DivTag();
divTag.appendTo(document.body);
divTag.css({
width : '200px',
height : 200px,
backgroundColor : 'red',
border : '10px dashed blue'
});- 这样的使用对象的方式进行创建标签非常方便, 创建多个不同样式的标签也非常轻松
但是这样也有缺点, 不能和 jQuery 一样, 不能进行链式变成, 我们可以这样修改, 在每一个方法后面加上一个
return thisfunction DivTag(){
// 注意这里的 this 指的是 通过构造函数创建出来的实例对象
this.DOM = document.createElement('div');
appendTo : function(node){
// this是实例对象, 不是DOM节点, 不能直接使用DOM属性和方法
node.appendChild(this.DOM);
return this;
};
css : function(option){
for(var key in option){
this.DOM.style[key] = option[key];
}
return this;
}
}
var divTag1 = new DivTag()
.appendTo(document.body)
.css({
width : '200px',
height : 200px,
backgroundColor : 'red',
border : '10px dashed blue'
});
var divTag2 = new DivTag()
.appendTo(document.body)
.css({
width : '400px',
height : 400px,
backgroundColor : 'pink',
border : '10px dashed green'
});
总结
什么是面向对象
面向对象说白了就是对面向过程进行了封装
比如说:
需求是 一个字符串是 str = 'abcdefg', 找到里面的e,并返回e的索引
使用面向过程的处理办法就是, 遍历字符串, 得到索引
var str = 'abcdefg';
for(var i = 0;i < str.length;i++){
var char = str.charAt(i);
if(char == 'e'){
conole.log(i);
break;
}
}使用面向过程的处理办法就是, 使用
indexOf, 得到索引var str = 'abcdefg';
console.log(str.indexOf('e'));用生活中吃饭的的例子就可以这样理解:
- 如果你自己烧, 那就需要(非常的麻烦, 时间有很长)
- 买菜
- 洗菜
- 烧饭烧菜
- 收拾
- 洗碗
- 如果是上饭店, 那就非常简单(因为买菜, 洗菜, 烧饭烧菜, 洗碗的工作都是别人帮你完成了)
- 吃就行了
JS面向对象使用面向对象进行开发的更多相关文章
- python 全栈开发,Day52(关于DOM操作的相关案例,JS中的面向对象,定时器,BOM,client、offset、scroll系列)
昨日作业讲解: 京东购物车 京东购物车效果: 实现原理: 用2个盒子,就可以完整效果. 先让上面的小盒子向下移动1px,此时就出现了压盖效果.小盒子设置z-index压盖大盒子,将小盒子的下边框去掉, ...
- 2018-2019-2 20175306实验二面向对象程序设计《Java开发环境的熟悉》实验报告
2018-2019-2 20175306实验二面向对象程序设计<Java开发环境的熟悉>实验报告 面向对象程序设计-1 实验要求: 参考:> http://www.cnblogs.c ...
- Day046--JavaScript-- DOM操作, js中的面向对象, 定时
一. DOM的操作(创建,追加,删除) parentNode 获取父级标签 nextElementSibling 获取下一个兄弟节点 children 获取所有的子标签 <!DOCTYPEhtm ...
- 2018-2019-20175205实验二面向对象程序设计《Java开发环境的熟悉》实验报告
2018-2019-20175205实验二面向对象程序设计<Java开发环境的熟悉>实验报告 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)>< ...
- #2019-2020-4 实验二面向对象程序设计《Java开发环境的熟悉》实验报告
2019-2020-4 实验二面向对象程序设计<Java开发环境的熟悉>实验报告 一.面向对象程序设计-1 ①实验要求: 1.参考 http://www.cnblogs.com/roced ...
- 前端 ---JS中的面向对象
JS中的面向对象 创建对象的几种常用方式 1.使用Object或对象字面量创建对象 2.工厂模式创建对象 3.构造函数模式创建对象 4.原型模式创建对象 1.使用Object或对象字面量创建对象 ...
- 06-03 Java 面向对象思想概述、开发设计特征,类和对象的定义使用,对象内存图
面向对象思想概述.开发设计特征 1:面向对象思想 面向对象是基于面向过程的编程思想. 面向过程:强调的是每一个功能的步骤 面向对象:强调的是对象,然后由对象去调用功能 2:面向对象的思想特点 A:是一 ...
- 前端JavaScript(3)-关于DOM操作的相关案例,JS中的面向对象、定时器、BOM、位置信息
小例子: 京东购物车 京东购物车效果: 实现原理: 用2个盒子,就可以完整效果. 先让上面的小盒子向下移动1px,此时就出现了压盖效果.小盒子设置z-index压盖大盒子,将小盒子的下边框去掉,就可以 ...
- 轻松理解JS中的面向对象,顺便搞懂prototype和__proto__
这篇文章主要讲一下JS中面向对象以及 __proto__,ptototype和construcator,这几个概念都是相关的,所以一起讲了. 在讲这个之前我们先来说说类,了解面向对象的朋友应该都知道, ...
随机推荐
- 【基础】这15种CSS居中的方式,你都用过哪几种?
简言 CSS居中是前端工程师经常要面对的问题,也是基本技能之一.今天有时间把CSS居中的方案汇编整理了一下,目前包括水平居中,垂直居中及水平垂直居中方案共15种.如有漏掉的,还会陆续的补充进来,算做是 ...
- ReactNative环境配置的坑
我用的是windows开发android,mac的可以绕道了. 1.android studio及Android SDK的安装 现在需要的Android版本及对应的tool 2.真机运行要配置对and ...
- Android Service 基础
启动方式 startService(Intent) 这种方式启动的Service可以在后台无限期的运行,与启动它的组件没有关系. bindService 绑定Service.它提供了一种类似C/S结构 ...
- Linux运维主流架构简单剖析
随着IT运维的不断发展,尤其的Linux的飞速发展,越来越多的企业开始使用Linux操作系统平台,例如CentOS.RedHat.Ubuntu.Fedora等等,成千上亿个网站涌现在当今互联网,互联网 ...
- 后端Nodejs利用node-xlsx模块读取excel
后端Nodejs(利用node-xlsx模块) /** * Created by zh on 16-9-14. */ var xlsx = require("node-xlsx") ...
- Oracle安装11.2.0.4.180116补丁及如何检查数据库安装补丁
最近做了一个安装11.2.0.4.180116补丁的实验,突然想起之前和同事讨论的一个问题:如何检查数据库安装补丁的版本,之前搜到的是去查dba_registry_history,有的说在操作系统中执 ...
- 替换Java字符串中的“& lt;”为“<”
发布webservice时 Java中的String类型会将 “<” 自动转换为 “<”,在建String转换为XML时就会出错,具体做法是: String strXml = “< ...
- openjudge(三)
已知三角形的三边分别是a.b.c, 先算出周长的一半s=1/2(a+b+c) 则该三角形面积S=根号[s(s-a)(s-b)(s-c)] 这个公式叫海伦--秦九昭公式 证明: 设三角形的三边a.b.c ...
- 关于input内容改变的触发时间
1.onchange onchange 事件会在域的内容改变时触发.支持的标签<input type="text">, <textarea>, <se ...
- 新事物学习---WebApp移动端手势Hammer
花落水流红,闲愁万种,无语怨东风. Hammer介绍 Hammer库是一个移动端手势库,移动端的手势操作(比如touch,tap,拖动,滑动等等)都可以用这个库,而我们不用关心,它的底层方案具体是怎么 ...