一、问题

  javascript是面向对象的,还是面向过程的?基于对象是什么意思?

  对象: 指的是对某一类事物进行抽象,抽象出这一类事物共同的特征以及行为(也就是属性和方法),那些拥有这一共同属性和方法的事物就是对象

二、分析

  面向对象和基于对象的区别:引用一个例子,比如建造房子

  • 面向对象:是先设计好图纸,然后按照这个图纸的设计去建造房子
  • 基于对象:是先建造一个房子,然后根据房子的样子,再去建造房子

  也就是说:

  • 面向对象:是先有一个抽象的对象描述(类), 然后根据这个描述去构建新的对象(实例化对象)
  • 基于对象: 是先有一个具体的对象,然后根据这个具体的对象,再去创建新的对象(实例化对象)

面向对象的三大基本特征:封装,继承,多态。

基于对象:也使用了对象,但是无法利用现有的对象的模板产生新的对象类型,继而产生新的对象,基于对象是没有继承的特点。

多态体现的就是继承,没有了继承就无从谈论多态。多态一般体现在抽象类上。JavaScript语言就是基于对象的,它封装了一些好的对象,调用对象的方法,设置对象的属性,但是却无法让开发者派生出新的类。只能使用现有对象的方法和属性。

三、javascript中对象的体现和使用

  我们通过多种方式来实现点击按钮,更改某个div的属性样式

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div: {
width: 300px;
height: 300px;
background-color: red;
}
</style>
</head>
<body>
<input type="button" value="点击变化" id="btn" />
<div id="div"></div> <script>
//点击按钮修改div的样式
//面向过程和面向对象实现方式
</script>
</body>
</html>

  面向过程的实现方式:知道需求,理清思路过程,然后按照这个过程从头到尾写

//点击按钮,改变div的样式--面向过程实现
document.getElementById("btn").onclick=function() {
document.getElementById("div").style.backgroundColor="yellow"
}

  面向对象思想的实现方式(初级): 

  按钮是一个对象;div是个对象;颜色是一个属性

//点击按钮,改变div的样式--面向对象(初级)
//ChangeStyle是构造函数
function ChangeStyle(btnId,divId,color){
this.btnObj=document.getElementById("btnId");
this.divObj=document.getElementById("divId");
this.color = color;
}
//数据共享的方式来改变样式
ChangeStyle.prototype.init = function() {
console.log(this) // 此this就是实例对象--即当前对象
var that = this; // 此处必须转存this,因为在function中this表示该点击事件的对象
this.btnObj.onclick=function() {
that.divObj.style.backgroundColor=that.color;
}
}
//实例化对象
var test = new ChangeStyle("btn", "div", "yellow");
test.init();//即打印当前的test实例对象

  面向对象实现(高级):

//点击按钮,改变div的样式--面向对象(高级)
//ChangeStyle是构造函数
function ChangeStyle(btnObj,divObj,json){
this.btnObj=btnObj;
this.divObj=divObj;
this.json = json;
}
ChangeStyle.prototype.init = function() {
//点击按钮改变div样式
var that = this; // 此处必须转存this,因为在function中this表示该点击事件的对象
this.btnObj.onclick=function() {
for(var key in that.json){
that.divObj.style[key]=that.json[key];
}
}
}
//实例化对象
var btnObj=document.getElementById("btnId");
var divObj=document.getElementById("divId");
var json = {"width": "500px","height": "500px","backgroundColor": "green","opacity": "0.1",}
var test = new ChangeStyle(btnObj, divObj, json);
test.init();//调用方法

  上面的代码更加具有共用性:只要使用最后的两行代码,可以通过任一对象的点击事件,操作任意对象的样式

  这就是面向对象的魅力所在!

四、结束

  

JS是面向过程、面向对象还是基于对象?面向对象的代码体现的更多相关文章

  1. 重学前端--js是面向对象还是基于对象?

    重学前端-面向对象 跟着winter老师一起,重新认识前端的知识框架 js面向对象或基于对象编程 以前感觉这两个在本质上没有什么区别,面向对象和基于对象都是对一个抽象的对象拥有一系列的行为和状态,本质 ...

  2. 理解面向过程(OPP)、面向对象(OOP)、面向切面(AOP)

    概念 面向过程编程OPP:Procedure Oriented Programming,是一种以事物为中心的编程思想.主要关注“怎么做”,即完成任务的具体细节. 面向对象编程OOP:Object Or ...

  3. python之面向过程,函数式编程,面向对象浅析

    python编程有面向过程.面向函数.面向对象三种,那么他们区别在哪呢?这个问题,让我想起我在学习编程的时候,我的老师给我举的例子.分享给大家. 面向过程就是将编程当成是做一件事,要按步骤完成! 比如 ...

  4. JavaSE——面向对象与面向过程、类与对象、(属性、方法、构造器)等

    一:面向对象与面向过程 二者都是一种思想,面向对象是相对于面向过程而言的. 面向过程: 1.面向过程思想强调的是过程(动作). 2.在面向过程的开发中,其实就是面向着具体的每一个步骤和过程,把每一个步 ...

  5. 面向过程(POP)、面向对象(OOP)、面向接口(IOP)、面向切面(AOP)

    面向过程:典型的是C/C++的结构体,结构体里只有变量,没有处理变量的方法,需要专门编写处理变量的方法. 面向对象:ArrayList<Integer> list=new ArrayLis ...

  6. 面向对象与基于对象 学习记录 thread举例

    /********************************************************************/* @file* @author def< qq gr ...

  7. JavaScript基于对象(面向对象)<一>类和对象

    javascript中一切皆对象,比如:Array,Date.....这些都是对象.javascript中没有class的定义,function既是定义函数,也可以是定义类.function Obj( ...

  8. JavaScript学习总结(九)——Javascript面向(基于)对象编程

    一.澄清概念 1.JS中"基于对象=面向对象" 2.JS中没有类(Class),但是它取了一个新的名字叫“原型对象”,因此"类=原型对象" 二.类(原型对象)和 ...

  9. JavaScript学习总结(5)——Javascript面向(基于)对象编程

    一.澄清概念 1.JS中"基于对象=面向对象" 2.JS中没有类(Class),但是它取了一个新的名字叫"原型对象",因此"类=原型对象" ...

随机推荐

  1. Linux下各文件夹的含义和用途

    Linux根目录”/“下各个系统文件夹的含义和用途 1./boot 该目录默认下存放的是Linux的启动文件和内核. 2./initrd 它的英文含义是boot loader initialized ...

  2. @InitBinder装配自定义编辑器

    @InitBinder装配自定义编辑器 第一步:BaseController.java,标注@InitBinder public class BaseController { @InitBinder ...

  3. C/C++ 父子进程之间的文件描述符问题

    在C程序中,文件由文件指针或者文件描述符表示.ISO C的标准I/0库函数(fopen, fclose, fread, fwrite, fscanf, fprintf等)使用文件指针,UNIX的I/O ...

  4. cool 软件 —— Carnac(实时桌面显示按键)

    1. Carnac 下载地址:Carnac, the Magnificent Keyboard Utility 使用说明:carnac – 在屏幕实时显示按键操作

  5. vue中assets和static的区别

    Vue中assets和static的区别 再一次框架定型中,与同事在静态资源的存放上有了一些分歧,后来经过查阅总结如下: 相同点:   assets和static两个都是存放静态资源文件.项目中所需要 ...

  6. [QT][SQLITE]学习记录一 querry 查询

    使用 QSqlQuery query ; query("SELECT id FROM TABLE1 WHERE id = '2017'); 的到的结果集就是query本身,此时需要使用 qu ...

  7. 扩展ScriptBundle,支持混淆加密javascript

    一.需求: 在web开发中,经常会处理javascript的一些问题,其中就包括js的压缩,合并,发布版本以及混淆加密等等问题.在asp.net 开发中我们使用ScriptBundle已经可以解决ja ...

  8. 选择合适的项目-任务管理工具Jira Redmine Trac对比

    1.团队开发时,需要一些项目-任务管理工具来分配和控制项目进度状态. 2.可选的项目管理工具有: Jira 收费 自带数据库,可配置mysql 功能强大(支持插件) 易用 Java 性能高 复杂 ht ...

  9. settimeout()在IE8下参数无效问题解决方法

    遇到这个问题,setTimeout(Scroll(),3000); 这种写法在IE8 下 不能够执行,提示参数无效, setTimeout(function(){Scroll()},3000);这种方 ...

  10. 完全卸载vs2013、vs2015的方法

    Visual Studio安装过程会安装好多组件,如果想要卸载的话会出现一些因难,在控制面板不容易卸载干净,在Linux下的命令都有--help参数来显示命令的用法,今天突发奇想,在控制台下输入vs2 ...