面向对象编程是一种设计思想,它是现实世界的抽象,任何现实世界中的事物都可以用面向对象思想来解决。“万物皆对象”,JavaScript中不是面向对象编程。而是面向函数编程,这里,JavaScript中函数是“一等公民”,那什么又是“一等公民”呢?就是函数和整数、字符串等常见概念的地位是平等的,一个整数和一个字符串等对象可以干的事,一个函数也可以办到。
面向对象我们经常和面向过程做比较,面向过程是C语言编程的核心思想

  1. 面向对象注重于抽象事物,而面向过程注重于描述事物
  2. 面向对象逻辑清晰有条理,而面向过程比较方面 JS通过函数和原型,模拟了传统的
  3. 面向对象编程中类的概念,实现了面向对象的编程模式

面向对象核心:封装、继承、多态
创建对象的三种方式:
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");}
}
  1. 在函数执行的时候,会在函数内部创建两个对象,arguments,this
  2. arguments存储着实参的一个类数组对象
  3. 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做了那些事?

  1. 创建一个新空对象
  2. 将构造函数的propertype属性指向新对象的__proto__
  3. 将构造的this指向空对象
  4. 执行构造函数的代码
  5. 将新对象返回
function BBB(){console.log(this)
}(function(){var obj={};obj.__proto__=BBB.prototype;BBB.call(obj);return obj
})

在声明函数的时候,会自动创建一个prototype属性,我们管它叫做原型,一般用来存放实例公用的方法。

在函数访问属性的时候,会在当前对象中寻找,如果当前对象中没有,则向该对象的__proto__属性中去寻找,如果还没有,则一直向下寻找,直到null为止

什么叫面向对象编程?相关推荐

  1. 【面向对象编程】(4) 类的继承,重构父类中的方法

    各位同学好,今天和大家分享一下面向对象编程中,类的三大特征之继承.主要介绍:子类继承父类的基本方法:重写父类的类方法:重构父类的初始化方法:super() 方法.本节主要是单继承,多继承在下一节中介绍 ...

  2. 【面向对象编程】(3) 类之间的交互,依赖关系,关联关系

    各位同学好,今天和大家分享一下面向对象编程中,类之间的交互,类之间的依赖关系和关联关系.有不明白的可见前一章节:https://blog.csdn.net/dgvv4/article/details/ ...

  3. 【面向对象编程】(1) 类实例化的基本方法

    各位同学好,本章节和大家分享一下面向对象编程的一些方法,通过一些案例带大家由浅入深掌握面向对象的编程. 1. 最基本的类实例化 创建类的方法是 class 变量名: ,实例化方法是 类名() ,分配属 ...

  4. C#编程概念系列(一):面向对象编程

    系列文章索引目录:http://www.cnblogs.com/loner/archive/2013/05/09/3068211.html 引子: 面向对象编程:这个在当下已不是什么时髦的概念,但通过 ...

  5. JavaScript面向对象编程

    自从有了Ajax这个概念,JavaScript作为Ajax的利器,其作用一路飙升.JavaScript最基本的使用,以及语法.浏览器对象等等东东在这里就不累赘了.把主要篇幅放在如何实现JavaScri ...

  6. python面向对象的优点_Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

  7. 转载知乎上的一篇:“ 面向对象编程的弊端是什么?”

    2019独角兽企业重金招聘Python工程师标准>>> 弊端是,没有人还记得面向对象原本要解决的问题是什么. 1.面向对象原本要解决什么(或者说有什么优良特性) 似乎很简单,但实际又 ...

  8. c语言面向对象编程中的类_C ++中的面向对象编程

    c语言面向对象编程中的类 Object oriented programming, OOP for short, aims to implement real world entities like ...

  9. ruby 新建对象_Ruby面向对象编程的简介

    ruby 新建对象 by Saul Costa 由Saul Costa Object-oriented programming (OOP) is a programming paradigm orga ...

  10. 面向对象编程概念_如何向6岁的孩子解释面向对象的编程概念

    面向对象编程概念 by Alexander Petkov 通过亚历山大·佩特科夫(Alexander Petkov) Have you noticed how the same cliche ques ...

最新文章

  1. 从Netty到EPollSelectorImpl学习Java NIO
  2. APL开发日志 -- 2013-03-02
  3. HTML中a标签/超链接标签的下划线怎么去掉
  4. BETA、RC、ALPHA、Release、GA 等版本号的意义
  5. python为text添加滚动条_在Tkinter中向一组小部件添加滚动条
  6. eclipse创建神经网络_使用Eclipse Deeplearning4j构建简单的神经网络
  7. idea报错Module Project1 must not contain source root ...\Project1\src. The root already belongs to .
  8. 【Python】Numpy处理.csv数据
  9. shiro filter
  10. linux命令行改变时区,Linux命令行操作修改系统时区
  11. 怎么删除映射网络里的计算机,W7怎么样删除映射上网网络驱动器
  12. 本地文件无法复制到VMware虚拟机
  13. 【第1课 项目愿景】PMP敏捷精讲第五章:项目立项 1/4-科科过PMP
  14. 猫哥教你写爬虫 044--模拟浏览器-作业
  15. 创业有感-表达能力很关键
  16. Vue项目启动时卡在98% after emitting CopyPlugin
  17. spring使用中applicationContext.xml文件头部声明
  18. 使命召唤19发布时间曝光 确定将于10月28号发布
  19. 手把手系列之三十——手把手教你做番薯小煎饼
  20. 简单实现图片多选功能

热门文章

  1. 身为职场女性,我想和你聊聊天
  2. c语言作业下载,C语言习题(附答案).doc
  3. CAD标注:折弯标注的使用技巧
  4. Ubuntu搭建web服务
  5. 怎么把pdf转换成图片?
  6. html背景图显示不全
  7. 软件测试入门之软件开发和测试模型(面试必考)
  8. 办公邮箱如何修改密码?这些小知识你知道吗?
  9. element-ui组件自定义表单验证(验证手机号码和邮箱为例)
  10. html多选框放在图片上,网页中图片格式问题地总结.doc