什么叫面向对象编程?
面向对象编程是一种设计思想,它是现实世界的抽象,任何现实世界中的事物都可以用面向对象思想来解决。“万物皆对象”,JavaScript中不是面向对象编程。而是面向函数编程,这里,JavaScript中函数是“一等公民”,那什么又是“一等公民”呢?就是函数和整数、字符串等常见概念的地位是平等的,一个整数和一个字符串等对象可以干的事,一个函数也可以办到。
面向对象我们经常和面向过程做比较,面向过程是C语言编程的核心思想
- 面向对象注重于抽象事物,而面向过程注重于描述事物
- 面向对象逻辑清晰有条理,而面向过程比较方面 JS通过函数和原型,模拟了传统的
- 面向对象编程中类的概念,实现了面向对象的编程模式
面向对象核心:封装、继承、多态
创建对象的三种方式:
1、创建对象
var objA={name:"A",eat:function(){}
}
var objB={name:"B",eat:function(){}
}
var objC={name:"C",eat:function(){}
}
2、工厂模式
function createObj(name){var obj={};obj.name=name;obj.eat=function(){console.log(name+"eat");}return obj;
}
3、构造函数模式
function CreateObj(name){this.name=name;this.eat=function(){console.log(this.name+"eat");}
}
- 在函数执行的时候,会在函数内部创建两个对象,arguments,this
- arguments存储着实参的一个类数组对象
- this指向函数的上下文(谁调用这个函数,this就指向谁)
什么是类数组
原文链接:添加链接描述
- 拥有length属性,其它属性(索引)为非负整数(对象中的索引会被当做字符串来处理);
- 不具有数组所具有的方法;
var arr=[1,2,1,4,32,2,323,23,32,32,33]数组
类数组:var arrLike={0:"chen",1:"xin",2:"hui",length:3}
像这种有length属性,key以数字标识的就是类数组
类数组转换为数组
args = Array.prototype.slice.call(arguments);Array.prototype.slice=function(){var result = new Array(); start = start || 0; end = end || this.length; //this指向调用的对象,当用了call后,能够改变this的指向,也就是指向传进来的对象,这是关键 for(var i = start; i < end; i++){ result.push(this[i]); } return result; }
call和apply动态改变this指向
var objA={name:"A",eat:function(){},A:bbb,B:{C:bbb}
}function bbb(){console.log(this);console.log(arguments)
}bbb();//window
objA.A();//objA
objA.B.C();//objA.B
//通过call改变指向
bbb.call(objA,1,2,3,3,32,32,323,);//objA
objA.A.call(objA.B,323,23,,2,323,23,32,3);//objA.B
objA.B.C.call(objA.B,3223,23,2,32,33,23,);//objA.B
//通过apply改变指向
bbb.call(objA,[1,2,3,3,32,32,323]);//objA
objA.A.call(objA.B,[323,23,,2,323,23,32,3]);//objA.B
objA.B.C.call(objA.B,[3223,23,2,32,33,23]);//objA.B
new做了那些事?
- 创建一个新空对象
- 将构造函数的propertype属性指向新对象的__proto__
- 将构造的this指向空对象
- 执行构造函数的代码
- 将新对象返回
function BBB(){console.log(this)
}(function(){var obj={};obj.__proto__=BBB.prototype;BBB.call(obj);return obj
})
在声明函数的时候,会自动创建一个prototype属性,我们管它叫做原型,一般用来存放实例公用的方法。
在函数访问属性的时候,会在当前对象中寻找,如果当前对象中没有,则向该对象的__proto__属性中去寻找,如果还没有,则一直向下寻找,直到null为止
什么叫面向对象编程?相关推荐
- 【面向对象编程】(4) 类的继承,重构父类中的方法
各位同学好,今天和大家分享一下面向对象编程中,类的三大特征之继承.主要介绍:子类继承父类的基本方法:重写父类的类方法:重构父类的初始化方法:super() 方法.本节主要是单继承,多继承在下一节中介绍 ...
- 【面向对象编程】(3) 类之间的交互,依赖关系,关联关系
各位同学好,今天和大家分享一下面向对象编程中,类之间的交互,类之间的依赖关系和关联关系.有不明白的可见前一章节:https://blog.csdn.net/dgvv4/article/details/ ...
- 【面向对象编程】(1) 类实例化的基本方法
各位同学好,本章节和大家分享一下面向对象编程的一些方法,通过一些案例带大家由浅入深掌握面向对象的编程. 1. 最基本的类实例化 创建类的方法是 class 变量名: ,实例化方法是 类名() ,分配属 ...
- C#编程概念系列(一):面向对象编程
系列文章索引目录:http://www.cnblogs.com/loner/archive/2013/05/09/3068211.html 引子: 面向对象编程:这个在当下已不是什么时髦的概念,但通过 ...
- JavaScript面向对象编程
自从有了Ajax这个概念,JavaScript作为Ajax的利器,其作用一路飙升.JavaScript最基本的使用,以及语法.浏览器对象等等东东在这里就不累赘了.把主要篇幅放在如何实现JavaScri ...
- python面向对象的优点_Python面向对象编程——总结面向对象的优点
Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...
- 转载知乎上的一篇:“ 面向对象编程的弊端是什么?”
2019独角兽企业重金招聘Python工程师标准>>> 弊端是,没有人还记得面向对象原本要解决的问题是什么. 1.面向对象原本要解决什么(或者说有什么优良特性) 似乎很简单,但实际又 ...
- c语言面向对象编程中的类_C ++中的面向对象编程
c语言面向对象编程中的类 Object oriented programming, OOP for short, aims to implement real world entities like ...
- ruby 新建对象_Ruby面向对象编程的简介
ruby 新建对象 by Saul Costa 由Saul Costa Object-oriented programming (OOP) is a programming paradigm orga ...
- 面向对象编程概念_如何向6岁的孩子解释面向对象的编程概念
面向对象编程概念 by Alexander Petkov 通过亚历山大·佩特科夫(Alexander Petkov) Have you noticed how the same cliche ques ...
最新文章
- 从Netty到EPollSelectorImpl学习Java NIO
- APL开发日志 -- 2013-03-02
- HTML中a标签/超链接标签的下划线怎么去掉
- BETA、RC、ALPHA、Release、GA 等版本号的意义
- python为text添加滚动条_在Tkinter中向一组小部件添加滚动条
- eclipse创建神经网络_使用Eclipse Deeplearning4j构建简单的神经网络
- idea报错Module Project1 must not contain source root ...\Project1\src. The root already belongs to .
- 【Python】Numpy处理.csv数据
- shiro filter
- linux命令行改变时区,Linux命令行操作修改系统时区
- 怎么删除映射网络里的计算机,W7怎么样删除映射上网网络驱动器
- 本地文件无法复制到VMware虚拟机
- 【第1课 项目愿景】PMP敏捷精讲第五章:项目立项 1/4-科科过PMP
- 猫哥教你写爬虫 044--模拟浏览器-作业
- 创业有感-表达能力很关键
- Vue项目启动时卡在98% after emitting CopyPlugin
- spring使用中applicationContext.xml文件头部声明
- 使命召唤19发布时间曝光 确定将于10月28号发布
- 手把手系列之三十——手把手教你做番薯小煎饼
- 简单实现图片多选功能