js就是个面向对象语言,一切皆对象

一、什么是面向对象?

  简单点,就这么说吧。生活中有一些个物品,譬如(哈哈,还想起个譬如)说一个iPhone,我们也不知道里面的工作原理吧?但是咱们会按按钮呀,用一俩天就会用了, oh my god,不知道原理就会用,好厉害。

  那么javaScrip中的自带方法Date对象都知道吧, 这兄弟有个儿子(闺女也行,你说什么就是什么)getMonth的方法,那你知道它是怎么知道现在是哪个月吗?不知道。管他呢,但是me会用

  其实呢,我们不需要知道原理就可以用它的功能,就是面向对象。

   其实对象就是一个整体,对外提供一些功能和操作,而你不知道它内部是怎么操作的。在编程中我们叫面向对象,在生活中也有,但是叫法不一样

  在编程中,就像jQuery,你知道它的$('div') 怎么获取到的DOM对象吗,不知道。(‘’我知道‘’,‘去一边去,你是看了源码。你拆机了,你能不知道?’)只要知道它干嘛的就行,那他是不是面向对象编程的呢?

二、面向对象特点

1、抽象:抽指把核心的东西抽出来,把与我们要解决的问题有关的东西拿出来摆在面前

2、封装:让使用对象的人不考虑内部实现,只考虑功能使用  把内部的代码保护起来,只留出一些个api接口供用户使用

3、继承:就是为了代码的复用,从父类上继承出一些方法和属性,子类也有自己的一些属性

4、多态:实际上是不同对象作用与同一操作产生不同的效果。多态的思想实际上是把“想做什么”和“谁去做“分开

三、对象的组成

1、方法   函数:过程、动态的

2、属性   变量:状态、静态的

四、this       当前的方法属于谁就是谁

例如点击事件里的this,其实就是触发事件的那个dom对象的onclick方法里的this,当然是人家自己咯

再比如说一个函数里的this,这个函数都属于window的一个方法,当然里面的this也是window咯

还有哦,不要在系统对象上面添加属性和方法,这样不太好

那么在谁身上加呢?在object这个对象身上,别的date呀array呀,这些对象都是有一些个好玩的功能的,

object也就自己最强大的一个功能就是,没有功能~~~~ 这样咱们就可以随意给他加属性和方法而不用去想会不会覆盖了

五、创建对象的方法

1、最基础的

 var obj = new Object()
obj.name = 'shizhikai'
obj.age = '3岁'
obj.showAge = function(){
console.log(this.age) //这个this是谁?知道吗? obj
}

但是这样太麻烦,我要写100个人,那得写100次。有别的方法吗?有

2、工厂方式 通过构造函数

function createPerson(name,age){
// 原料
var obj=new Object();
// 加工
obj.name=name;
obj.age=age;
obj.showAge=function() {
alert(this.age)
}
// 出厂
return obj;
}
var obj1=createPerson("shizhikai",'3岁')
var obj2=createPerson("ni",'18岁'); alert(obj1.showName)//function(){alert(this.name)}
alert(obj2.showName)//function(){alert(this.name)}

结果都一样但是比较一下:

 console.log(obj1.showName==obj2.showName) //false

这里居然是不一样!!这样的话那我一百个对象就有一百个不一样的方法要占用内充~~~~

也就说会有两种问题:1.  创建对象没有用到new  感觉心里空落落的  2. 方法都不一样的话太占据空间了~~~~

那就去解决

 function createPerson(name,age){
// 原料 系统偷偷摸摸做的
// var this=new Object();
// 加工
this.name=name;
this.age=age;
this.showName=function() {
alert(this.name)
}
// 出厂 系统偷偷摸摸做的
// return this;
} var obj1=new createPerson("shizhikai",'3岁')
var obj2=new createPerson("ni",'18岁');

这样的话代码又少了很多,很爽,而且还有new了,其实就是利用了一个概念,任何函数都可以new一下

譬如

function aa(){}
console.log(new aa()) //Object

那它就变成对象啦,那它里面的this就是它new出来的自己啦~~~~

但是这样还是有一个问题,

console.log(obj1.showName==obj2.showName) //false

还要占内存

那继续解决

这里就要用到面向对象中不得不说的,而且很重要的的东西.prototype 原型~~~

六、.prototype

先来看个例子,比如说有两个熊,熊大、熊二去偷了同一颗苹果树上的蜂蜜窝,熊大偷了后又拿了个苹果,熊二看见熊大有苹果就不干了,去找苹果树的理论,为什么他

有我没有,这就不讲道理了吧,毕竟熊大那个苹果是自己顺便拿的,熊二当然没有了,但是如果说蜂蜜窝就在苹果上面筑的巢话,这样熊大就不用去拿苹果了,直接全窝端,哈哈哈。俩只熊都有了呢,皆大欢喜。

 var xiong1=[1,2,3];
var xiong2=[4,5,6];
xiong1.sum=function(){
var result=0;
for(var i=0;i<this.length;i++){
result+=this[i]
}
return result;
}
alert(xiong1.sum()) //
alert(xiong2.sum()) //error

就像这个例子,xiong2根本没有这个方法嘛,想要的话,只能自己去添加咯,再写一遍

 xiong2.sum=function(){
var result=0;
for(var i=0;i<this.length;i++){
result+=this[i]
}
return result;
}

这样还是麻烦,占内存

 var xiong1=[1,2,3];
var xiong2=[4,5,6];
Array.prototype.sum=function(){
var result=0;
for(var i=0;i<this.length;i++){
result+=this[i]
}
return result;
} alert(xiong1.sum()) //
alert(xiong2.sum()) // function createPerson(name,age){
this.name=name;
this.age=age;
}
createPerson.prototype.showAge=function(){
this.showAge=function() {
console.log(this.age)
}
}

那么上一个知识点的那两个问题可就都解决了哦~~~

这样也就发展出一个广泛的一个写法了哦

用构造函数去写自有属性和方法,用原型去写共有的属性和方法,这种方式叫混合方式

那么面向对象说完没?没有,下节再看吧。我吃饭去了。。。。。。。。。。

javaScript面向对象是什么?(一)的更多相关文章

  1. JavaScript学习笔记(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  2. JavaScript学习总结(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  3. Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇

    Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...

  4. javascript面向对象系列第四篇——选项卡的实现

    前面的话 面向对象的应用并非只是读几本书那么容易,需要有大量的工程实践做基础才能真正理解并学会使用它.本文将用面向对象的技术来制作一个简单的选项卡 图示说明 由图示结果看到,这是一个非常简单的选项卡. ...

  5. javascript面向对象系列第三篇——实现继承的3种形式

    × 目录 [1]原型继承 [2]伪类继承 [3]组合继承 前面的话 学习如何创建对象是理解面向对象编程的第一步,第二步是理解继承.本文是javascript面向对象系列第三篇——实现继承的3种形式 [ ...

  6. javascript面向对象系列第一篇——构造函数和原型对象

    × 目录 [1]构造函数 [2]原型对象 [3]总结 前面的话 一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如 ...

  7. Javascript面向对象(封装、继承)

    Javascript 面向对象编程(一):封装 作者:阮一峰 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程( ...

  8. 《javascript面向对象精要》读书笔记

    <javascript面向对象精要> 买这本书的原因主要是因为作者,Nicholas C. Zakas 牛X闪闪的js专家,读过js高程的应该都知道他,而这本书是他的最新力作,感觉也是js ...

  9. 【转】javascript面向对象编程

    摘要:本文本来是想自己写的,奈何花了好长时间写好之后忘记保存,还按了刷新键,一键回到解放前,索性不写了,所以本文是转载的. 面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式,主要包括模块化. ...

  10. javascript面向对象(一):封装

    本文来自阮一峰 学习Javascript,最难的地方是什么? 我觉得,Object(对象)最难.因为Javascript的Object模型很独特,和其他语言都不一样,初学者不容易掌握. 下面就是我的学 ...

随机推荐

  1. 如何用tomcat发布自己的Java项目

    如何用tomcat发布自己的Java项目 tomcat是什么?它是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器.我们用Java开发出来的web项目,通过tomcat发布出来,别人就可 ...

  2. velocity #parse抽象重用部分组件

    在某些时候,处于重用的目的,我们会选择将可以重用的部分内容剥离在单独的模板文件中,比如对于查询页面的表格部分,因为现在很多的条件可能是通过弹出查询框的方式来实现,而作为普通页面的时候,他们会有更多的功 ...

  3. 20145106java实验四

    实验名称:Java网络编程 实验内容: 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 结对小伙伴 20145109竺文君 博客地址: 在本次实验中,是以我作为服务 ...

  4. Docker 下安装 Spark

    1. 安装Docker, 见上篇. 2. 安装ubuntu:    docker run --name dcSpark ubuntu 3. 运行 Bash:     docker exec -ti d ...

  5. .NET Core2.0应用IdentityServer4

    IdentityServer4能解决什么问题 假设我们开发了一套[微博程序],主要拥有两个功能:[登陆验证].[数据获取] 随后我们又开发了[简书程序].[知乎程序],它们的主要功能也是:[登陆验证] ...

  6. python 中的object与type的关系

    object 和 type的关系很像鸡和蛋的关系,先有object还是先有type没法说,obejct和type是共生的关系,必须同时出现的. 在看下去之前,也要请先明白,在Python里面,所有的东 ...

  7. Java 面向对象之static,final,匿名对象,内部类,包,修饰符

    01final关键字概念 A: 概述 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承, 或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这 ...

  8. vmstat命令中System下in cs 何时为高?

    https://superuser.com/ https://serverfault.com/ 良好状态指标 CPU利用率:User Time <= 70%,System Time <= ...

  9. kali 下程序卸载方法

    ali中主要为2种卸载方法:1.apt2.dpkg 使用apt的方式有:apt-get remove [package]apt-get remove --purge # ------(package ...

  10. django查询操作

    查询操作是Django的ORM框架中最重要的内容之一.我们建立模型.保存数据为的就是在需要的时候可以查询得到数据.Django自动为所有的模型提供了一套完善.方便.高效的API,一些重要的,我们要背下 ...