这里主要简单写一下javaScript面向对象的不断发展的一些写法和优缺点。直接开门见山。

1、最简单的方式

创建Object的实例,为它添加属性和方法

var car = new Object();     //创建实例
car.color = "red";              //为car这个对象增加颜色的属性
car.showColor= function(){       //car的方法//处理
}

对象字面量的写法

var car = {color : "red",showColor : function(){//处理}
}

使用创建单个实例或是对象字面量的写法可以创建单个对象,但是如果我们需要创建多个对象,以上方法就显得很麻烦,我们必须复制一套相同的代码,产生car2、car3

2、使用工厂模式创建对象

工厂方式创建对象避免了代码的重复,通过构建工厂,大大方便了实例化

function makeCar(color){var car = new Object();        //创建一个实例car.color = color,             //添加属性car.showColor = function(){    //添加方法alert(this.color);}   return car;                    //将生成的实例返回
}调用:
var car1 = car("red");
var car2 = car("green");

工厂模式顺利解决创建多个对象时编写重复代码的问题。而另一个方面,通过上面这种方式,我们知道,car1和car2都是通过生成Object实例在附加属性和方法产生的,即他们都是Object的实例,所以我们并不能很好的知道产生的对象的类型。

3、构造函数模式

function Car(color){                  //一般构造函数开头大写this.color = color;               //添加属性 this.showColor = function(){      //添加方法alert(this.color);}
}调用:
var car1 = new Car("red");
var car2 = new Car("green");

比较构造函数模式和工厂模式我们可以看出以下区别

1、在构造函数模式里面并没有new Object();方式创建实例和对此实例的赋值

2、在构造函数模式里面没有返回创建的实例

3、构造函数模式直接将属性和方法赋值给this对象

4、构造函数模式使用new 操作符产生Car的对象

  通过上述的方法,我们就可以创建两个Car的对象,解决对象识别的问题(可以使用instanceof方法检验)

  那么使用上面的构造方法创建对象是不是没有缺点呢?答案是否定的,上面的代码中的创建方法的方式实际上相当于

  this.showColor = new Function("alert(this.color)");

  这样的话,new出多个对象就相当于创建了多个Function实例,而这个是浪费的。于是我们可以这样改造:

function Car(color){                  //一般构造函数开头大写this.color = color;               //添加属性 this.showColor = showColor;
}
function showColor(){      //添加方法alert(this.color);
}

但是这种方法同样存在一个缺点,那就是会产生showColor这个全部的函数,是函数的封装性无法实现。

4、构造函数和原型链方式

function Car(color){                  //一般构造函数开头大写this.color = color;               //添加属性
}
Car.prototype = {   constructor : Car,showColor : function(){alert(this.color);}
}

我们需要知道的是,使用原型链定义方法和共享的属性可以通过引用的方式共享,可以最大程度的节约内存,这是采用度较高的一种方式。

转载于:https://www.cnblogs.com/sheilooblog/p/5252291.html

javaScript面向对象表示相关推荐

  1. JavaScript面向对象编程

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

  2. 《JavaScript面向对象精要》读书笔记

    JavaScript(ES5)的面向对象精要 标签: JavaScript 面向对象 读书笔记 2016年1月16日-17日两天看完了<JavaScript面向对象精要>(参加异步社区的活 ...

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

    前面的话 一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如何用构造函数和原型对象来创建对象 构造函数 构造函数是 ...

  4. 用JSON和Javscript的prototype来构建完善的Javascript面向对象表示法

    [原文地址:http://www.cnblogs.com/robinhood/archive/2006/11/16/515412.html] 上次发贴没能很好的总结Javascrip编写类的方法,这次 ...

  5. 《JavaScript面向对象精要》——1.8 原始封装类型

    本节书摘来自异步社区<JavaScript面向对象精要>一书中的第1章,第1.8节,作者:[美]Nicholas C. Zakas 译者: 胡世杰 更多章节内容可以访问云栖社区" ...

  6. 《JavaScript面向对象编程指南》——第1章 引言1.1 回顾历史

    本节书摘来自异步社区<JavaScript面向对象编程指南>一书中的第1章,第1.1节,作者: [加]Stoyan Stefanov 译者: 凌杰 更多章节内容可以访问云栖社区" ...

  7. 《JavaScript面向对象编程指南》——1.3 分析现状

    本节书摘来自异步社区<JavaScript面向对象编程指南>一书中的第1章,第1.3节,作者: [加]Stoyan Stefanov 译者: 凌杰 更多章节内容可以访问云栖社区" ...

  8. JavaScript面向对象及原型 及setTimeout

    JavaScript面向对象 最笨的写法: function Foo(n) {     this.name = n;     this.sayName = function() {         c ...

  9. JavaScript面向对象的支持(7)

    ================================================================================ Qomolangma OpenProj ...

  10. (二)Javascript面向对象编程:构造函数的继承

    Javascript面向对象编程:构造函数的继承 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承&q ...

最新文章

  1. No service of type Factory available in ProjectScopeServices
  2. 院士谈如何做好研究生:要逼着自己去想问题,最大的浪费是聪明人不思考
  3. Python 0/1背包、动态规划
  4. SourceTree安装破姐添加SSH KEY以及拉取代码教程(附资源下载)
  5. jquery基本操作笔记
  6. 字体Times New Roman
  7. 搭建网站必不可少的知识14
  8. 利用Python进行「基金投资组合优化」(一)
  9. mysql workbench for ubuntu测试
  10. 2.8.13 hadoop体系之离线计算-HBase数据库-HBase的优化
  11. 游戏测试和软件测试有什么区别?
  12. matlab从mp4文件中提取音频,如何提取mp4视频中的音频文件 将视频转换为MP3音频...
  13. 常识性知识,高速快捷知识
  14. html 按钮 水波纹,点击按钮出现水波纹动画
  15. Field II 超声声场仿真(3): 脉冲-回波响应(原理代码)
  16. 基于STM32的ESP8266使用教程(二)
  17. 身份证OCR识别工作原理及流程
  18. 什么是脚本语言?什么是解释性语言?什么是编译性语言?
  19. 细讲逻辑斯蒂回归与朴素贝叶斯、最大熵原理的爱恨交织(五)
  20. 音频编解码标准G.711与G.729

热门文章

  1. Android之在Layout中自定义View
  2. Clojure 入门
  3. eclipse安装hadoop插件及配置
  4. 为什么要使用EJB?
  5. java 数据结构源码--线段树
  6. C语言:关键字volatile详解!
  7. 剑指offer六:旋转数组的最小数字
  8. 02 面向对象之:类空间问题以及类之间的关系
  9. IDEA快捷键(修改成eclipse版)+Templates
  10. k8s 创建资源的两种方式 - 每天5分钟玩转 Docker 容器技术(124)