概述

到这里我们讲说js面向对象的系列部分的最后一个课程,面向对象必须掌握两个东西一个是对象的创建一个是继承。这节课我们重点说说这两个问题最后我们说下在ES6里面面向对象怎么玩。

1对象的创建

我们第一节课已经就会用了,单体模式,你可以管它叫json我也不想多说就是这个。

var girlFriend = {
//属性:
hair:"long",
eye:"big",
hobby:"travel",
//方法
cook:function(){},
wash:function(){}
};

下面我说一种更普遍的方式,这个大家看到的情况更普遍,我们一直说js的对象和传统对象不一样它是基于原型的,那么看看创建对象方式。

只需要记住一句话,属性放在构造函数里面,方法放在原型上。

好现在我们重新搞一个妹子,用你熟悉的姿势。

//属性放在构造函数里
function Girl (hair,eye,hobby){
this.hair = hair;
this.eye = eye;
this.hobby = hobby;
}
//方法放在原型上
Girl.prototype.cook = function(){};
Girl.prototype.wash = function(){} var girlFriend = new Girl('long','big','travel');

这样不挺好吗,我们都这样用啊。

这里我就说下,new关键字的由来。

简单的说new关键字并不该出现在js里,或者说并不是技术原因,仅仅是因为为了争取java那部分用户,所以javascript才叫javascript,然后类这一块又使用了new关键字去符合java程序员的习惯,赢得他们的好感,所以new关键字的出现其实是一个市场策略。但是问题来了,javascript基于原型和java这些语言的类跟js根本不是一个概念new怎么用啊?好,我们上例子说明:
//属性放在构造函数里
function Girl (hair,eye,hobby){
this.hair = hair;
this.eye = eye;
this.hobby = hobby;
}
//方法放在原型上
Girl.prototype.cook = function(){};
Girl.prototype.wash = function(){} var girlFriend = new Girl('long','big','travel');

那new关键字干嘛了?

简单的说做了三件事:

1.执行构造函数(别太担心名词,就当成普通函数就行,一nainai区别都没)
2.在Girl这个构造函数里面,创建一个 空白的Object
3.将 this 指向这个空白的Object

这里使用我并不推荐使用new,为什么?

有人说使用new可能出现的问题是把new忘掉了就会返回undefined,比如我道哥(Douglas Crockford's,JSON的创造者,《javascript语言精髓》的作者,多说一句,《javascript语言精髓》初学者不要看,你会只有两个问题,这个画的是啥,这特么画的又是啥),但是个人认为关键原因不是这个,毕竟修复忘掉的new至少有两种方式,一种大写构造函数方法首字母作为提醒,一种是用函数方法,我这里就不展开说了,毕竟不重要。

关键原因是JavaScript是一种prototypical类型语言,在创建之初,是为了迎合市场的需要,让人们觉得它和Java是类似的,才引入了new关键字。Javascript本应通过它的Prototypical特性来实现实例化和继承,但new关键字让它变得不伦不类。

不废话怎么解决,

一种方式是使用jquery的方式,返回一个含有new 对象的函数,但是这个并没有从本质上改变使用new.

第二种方式彻底抛弃new.

作为一个面向对象编程无非就关心两件事,创建和继承

那好我们看看创建的时候怎么搞,

第一种方式,单体模式,不用墨迹了。

第二种方式,就不讲了,其实就是jquery那个方式,我们怎么简单怎么来。

单体模式

var girlFriend = {
//属性:
hair:"long",
eye:"big",
hobby:"travel",
//方法
cook:function(){},
wash:function(){}
};

好关键看继承,我们看见你女儿怎么把你女朋友的优良基因继承下来的。

简单的令人发指。

var daughter =  Object.create(girlFriend);

完了,确实完了,这就继承完了,以前的改this指向,什么修改原型,去你妹的统统的没了。

我知道你想说啥,我擦嘞,兼容性咋样。好吧,本着授人以鱼不如授人以红烧鱼的精神,大彬哥给你搞一把

Object.prototype.create = Object.prototype.create||function(o){

        function F(){}
F.prototype = o;
return new F(); };

好,这样就鸟了,多么蓝的天啊,面向对象的语法就结束了,剩下的就是面向对象的实际案例了,比如组件化开发,后面我们就看看实际库怎么玩的。

体验js之美第八课-面向对象创建和继承终结篇的更多相关文章

  1. python第三十八课——面向对象(一)

    1.面向对象:(思想) 面向:看.关注.瞅 对象:个体.实体.实例.结果单词:object在python中一些皆对象 面向过程:(思想) 面向:看.关注.瞅 过程:经过.经历.从头到尾 使用一些生活中 ...

  2. 体验javascript之美第五课 五分钟彻底明白 匿名函数自执行和闭包

    通过文你将学到: 1.闭包是怎么回事儿? 2.闭包的原理和在jquery中的应用 3.从一到面试题彻底理解闭包和垃圾回收机制 4.闭包在jquery中的应用 概述 经常听到闭包这个词儿,或者匿名函数自 ...

  3. 快学Scala 第十八课 (trait多继承)

    trait多继承: trait的继承并不像类拥有相同的含义!在下面这个例子中,如果还是运用类的继承的思想,那么运行结果将是什么也没有. trait Logged { def log(msg: Stri ...

  4. Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现

    UI系列教程第八课:Lance老师UI系列教程第八课->新浪新闻SlidingMenu界面的实现 今天蓝老师要讲的是关于新浪新闻侧滑界面的实现.先看看原图: 如图所示,这种侧滑效果以另一种方式替 ...

  5. Python第八课学习

    Python第八课学习 www.cnblogs.com/resn/p/5800922.html 1 Ubuntu学习 根 / /: 所有目录都在 /boot : boot配置文件,内核和其他 linu ...

  6. NeHe OpenGL教程 第四十八课:轨迹球

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  7. Kali Linux Web 渗透测试视频教程— 第八课 nessus

    Kali Linux Web 渗透测试视频教程— 第八课 nessus 文/玄魂 视频课程地址:http://edu.51cto.com/course/course_id-1887.html 目录 n ...

  8. NeHe OpenGL教程 第三十八课:资源文件

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  9. NeHe OpenGL教程 第二十八课:贝塞尔曲面

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

随机推荐

  1. SyntaxError: keyword can't be an expression

    创建字典对象时: D1=dict('name'='Bob','age'=20,'score'=90) SyntaxError: keyword can't be an expression 解决方法: ...

  2. Chapter06 数组(Array)

    目录 Chapter06 数组 6.1 数组的认识 6.2 数组的使用 使用方式1 - 动态初始化 使用方式2 - 动态初始化 使用方法3 - 静态初始化 6.3 数组使用的注意事项和细节 6.4 数 ...

  3. 关于Web的一些知识,Web怎么构成?

    前端学习:学习地址:黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动,下面这些都是一些学习笔记.临渊羡鱼,不如退而结网!!愿我自己学有所成,也愿每个前端爱好者学有所成 ...

  4. 数字逻辑实践6-> 从数字逻辑到计算机组成 | 逻辑元件总结与注意事项

    00 一些前言 数字逻辑是计算机组成与体系结构的前导课,但是在两者的衔接之间并没有那么流畅,比如对面向硬件电路的设计思路缺乏.这篇总结是在数字逻辑和计组体系结构的衔接阶段进行的. 虽然这篇文是两门课的 ...

  5. Linux 常用管理命令

    系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # ho ...

  6. Redis 使用规范

    Redis 使用规范围绕如下几个纬度展开: 键值对使用规范: 命令使用规范: 数据保存规范: 运维规范. 键值对使用规范 有两点需要注意: 好的 key 命名,才能提供可读性强.可维护性高的 key, ...

  7. SQL语句优化、mysql不走索引的原因、数据库索引的设计原则

    SQL语句优化 1 企业SQL优化思路 1.把一个大的不使用索引的SQL语句按照功能进行拆分 2.长的SQL语句无法使用索引,能不能变成2条短的SQL语句让它分别使用上索引. 3.对SQL语句功能的拆 ...

  8. 关于MVC WebAPI 中加入任务调度功能的问题 (MVC WebAPI 任务调度)

    在MVC WebAPI中加入任务调度功能.即在MVC WebAPI启动时,启用任务调度程序. 但是这里有一个问题点,就是部署好IIS站点后,发现任务调度并没有启用.原因为何? 原因是部署好IIS站点后 ...

  9. 千兆网数据CRC检验和过滤

    项目简述 本次项目在计算机将图像数据信息通过千兆网发送给FPGA后,由于接收到的数据可能混乱和无效,需要对数据CRC校验和无效包过滤. 项目原理及框图 对iddr_ctrl模块的输入数据和使能信号,分 ...

  10. 关于如何让写自然溢出hash的无辜孩子见祖宗这件事

    关于如何让写自然溢出hash的无辜孩子见祖宗这件事 来源博客 这几天考试连着好几次被卡hash卡到死. 我谔谔,为什么连hash都要卡. 码力弱鸡什么时候才能站起来. 只需要任意两种字符,比如噫呜呜噫 ...