在我们程序猿界一直流传这这么一个joke,没女票我们可以new一个、没房子没票子没车子我们同样new一个!当然这听着更像是一种自嘲,毕竟我们程序猿都爱自嘲,哈哈,废话不多说,今天就由我带着你们来入JavaScript面向对象这个坑!千万别弃坑!

一、理解对象:

创建对象的两种方法:直接声明、Object的实例化

直接声明:

 Var zhangsan = {

 Name : “zhangsan”,

 Age : 29,

 //创建一个introduce函数,用于返回张三的姓名

 introduce.function(){

 return zhangsan.name;

 }

 }

Object的实例化:

 Var zhangsan = new Object();

 zhangsan.name = “zhangsan”;

 zhangsan.age = 29;

 zhangsan.introduce = function(){

 return zhangsan.name;

 };

调用方法:

 Document.write(zhangsan.name+zhangsan.age);或者

 Alert(zhangsan.introduce());

二、类的实现:

 

工厂生产对象:适用于当需要大规模输出对象时的问题

 Function CreateCar(engine,tire){

 Var car = new Object();

 car.engine=engine;

 car.tire   = tire;

 return car;

 }

调用工厂生产对象:

Var Audi = CreateCar(”four-engine”,”four-tire”);

生产出Audi一辆,即new了一个对象

说白了,工厂模式就是把创建对象的方法封装在函数中。

 

实际上,当你用instanceof运算符对实例Audi检测时:

Alert(Audi instanceof car);

结果会弹出对话框显示false。

即Audi不是car实例化出的对象!

 

三、构造函数

为解决上述问题特引入构造函数大佬

将以上的代码略作改写:

 Function CreateCar(engine,tire){

 this.engine=engine;

 this.tire=tire;

 this.drive = function(){

 document.wirte(this.engine+this.tire);

 };

 }

其实构造函数就是一个带this的普通函数,它不是大佬,哈哈!它里面的this就指通过这个构造函数生成一个新的对象。

 

虽说我们揭开了它大佬的面纱,但大佬还是大佬,它还是有用的..

 

 Var Audi = new car(”four-engine”,”four-tire”);

 Alert(Audi instanceof car);

结果惊人的弹出显示:true

大佬果然是大佬!

但问题又来了,大佬也不是没有缺点,它的模式虽然好用,但是存在浪费内存的嫌疑,这就让大佬的声誉受到了严重的影响:

每一次生成一个person对象,都必须重新构建一遍sayName函数,真的麻烦!

 

铛,铛,铛!震惊 “全局函数” 出场竟然..

 

 Function sayName(){

    Document.write(this.name);

 }

然后再把person类中将sayName()指向外部的sayName()

this.sayName = sayName;

厉害了wold哥!

 

问题又来了,在全局变量中定义的函数只能被某个对象所调用,让这个函数有点名不副实的样子,而且当对象如果需要很多方法,就需要定义同样多的全局变量。这样对象的封装就毫无意义可言。这些问题我们都可以通过原型模式(Prototype)来解决。

原来一山更比一山高啊,这世外高人第一次见..

    Person.prototype.sayName = function (){

        document.write (this.name);

};

与之前的:

Function sayName(){

   Document.write(this.name);

}

相比,第二个好low!

 

那么这位世外高人有什么用呢?

 

废话不多说上代码:

personA.sayName = function(){

    document.write("personA:"+this.name+"<br/>");

}//对父对象中的方法进行复写,personA是person函数实例化出的一个新对象

哇!QAQ

本期的风趣的JavaScript面向对象课程就结束啦,谢谢大家的浏览和指正!我们下期再见!

风趣的JavaScript面向对象入门课程一的更多相关文章

  1. JavaScript面向对象入门

    什么是JavaScript? 我们可以从几个方面去说JavaScript是什么: 基于对象 javaScript中内置了许多对象供我们使用[String.Date.Array]等等 javaScrip ...

  2. JavaScript面向对象轻松入门之封装(demo by ES5、ES6、TypeScript)

    本章默认大家已经看过作者的前一篇文章 <JavaScript面向对象轻松入门之抽象> 为什么要封装? 封装(Encapsulation)就是把对象的内部属性和方法隐藏起来,外部代码访问该对 ...

  3. JavaScript面向对象轻松入门之概述(demo by ES5、ES6、TypeScript)

    写在前面的话 这是一个JavaScript面向对象系列的文章,本篇文章主要讲概述,介绍面向对象,后面计划还会有5篇文章,讲抽象.封装.继承.多态,最后再来一个综合. 说实话,写JavaScript面向 ...

  4. JavaScript面向对象编程入门

    来源极客网 function Person() { var _this = {} //创建一个空的对象,接着我们利用这个"空的对象"承载Person的属性和方法 _this.say ...

  5. JavaScript面向对象轻松入门之综合

    javascrpit面向对象之综合   这一章是对前几章的一个总结,通过一个案例来综合认识javascript面向对象的基本用法   需求: 几乎所有的web应用都需要保存数据一些到本地,那么我们就来 ...

  6. JavaScript基础入门12 - 面向对象编程

    目录 JavaScript 面向对象编程 前言 构造函数创建对象 instanceof constructor 返回值 原型对象 关于对象的属性查找 in hasOwnProperty() JS当中实 ...

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

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

  8. 快速学习JavaScript面向对象编程

    到处都是属性.方法,代码极其难懂,天哪,我的程序员,你究竟在做什么?仔细看看这篇指南,让我们一起写出优雅的面向对象的JavaScript代码吧! 作为一个开发者,能否写出优雅的代码对于你的职业生涯至关 ...

  9. 第一百零九节,JavaScript面向对象与原型

    JavaScript面向对象与原型 学习要点: 1.学习条件 2.创建对象 3.原型 4.继承 ECMAScript有两种开发模式:1.函数式(过程化),2.面向对象(OOP).面向对象的语言有一个标 ...

随机推荐

  1. mysql存储过程 基本语法

    话不多说 一.MySQL 创建存储过程 "pr_add" 是个简单的 MySQL 存储过程,这个存储过程有两个 int 类型的输入参数 "a"."b& ...

  2. spring mvc:属性无法自动注入

    在使用spring mvc 3开发一个项目模块时,遇到这样一个奇怪的问题: 前端页面发送的请求中,所有参数都无法自动注入到指定的@ModelAttribute对象中,经过检查,参数名称与接受对象的属性 ...

  3. chrome开发工具指南(六)

    检查和编辑页面与样式 使用 Chrome DevTools 的 Elements 面板检查和实时编辑页面的 HTML 与 CSS. 在 Elements 面板中检查和实时编辑 DOM 树中的任何元素. ...

  4. 微信录音文件上传到服务器以及amr转化成MP3格式

    微信公众号音频接口开发 根据业务需求,我们可能需要将微信录音保存到服务器,而通过微信上传语音接口上传到微信服务器的语音文件的有效期只有3天,所以需要将文件下载到我们自己的服务器. 上传语音接口 wx. ...

  5. 手机端rem适应

    这段时间做了几个手机版的项目,因为没有用框架,所以用rem来做适应,下面就分享一下 //第一种是比较简单的代码 (function(win) { resizeRoot(); function resi ...

  6. 很全面的Android面试题

    Activity 什么是Activity 四大组件之一,一个和用户交的互界面就是一个activity,是所有 View 的容器 我开发常用的的有FragmentActivitiy,ListActivi ...

  7. C# yield return用法

    本文实例讲述了C#中yield return用法,并且对比了使用yield return与不使用yield return的情况,以便读者更好的进行理解.具体如下: yield关键字用于遍历循环中,yi ...

  8. C++ Primmer 学习笔记

    一.开始 (一)输入输出 1.endl的作用 endl操纵符用于结束当前行,将与设备关联的缓冲区内容刷新到设备中.如果没有这个字符,一旦程序突然崩溃,就可能导致输出还停留在缓冲区里,而不显示到设备. ...

  9. MySQLzip archive版本(5.7.19)安装教程

    1.  从官网下载zip archive版本http://dev.mysql.com/downloads/mysql/ 2. 解压缩至相应目录,并配置环境变量(将*\bin添加进path中): 3. ...

  10. Java8-初识Lambda

    廉颇老矣,尚能饭否 Java,这位已经20多岁的编程语言,称得上是编程语言界的老大哥了.他曾经攻城略地,碾压各路编程语言小弟,风光无限,不可一世.现在,也是家大业大,江湖地位,很难撼动. 但是,这依然 ...