javaScript面向对象表示
这里主要简单写一下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面向对象表示相关推荐
- JavaScript面向对象编程
自从有了Ajax这个概念,JavaScript作为Ajax的利器,其作用一路飙升.JavaScript最基本的使用,以及语法.浏览器对象等等东东在这里就不累赘了.把主要篇幅放在如何实现JavaScri ...
- 《JavaScript面向对象精要》读书笔记
JavaScript(ES5)的面向对象精要 标签: JavaScript 面向对象 读书笔记 2016年1月16日-17日两天看完了<JavaScript面向对象精要>(参加异步社区的活 ...
- javascript面向对象系列第一篇——构造函数和原型对象
前面的话 一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如何用构造函数和原型对象来创建对象 构造函数 构造函数是 ...
- 用JSON和Javscript的prototype来构建完善的Javascript面向对象表示法
[原文地址:http://www.cnblogs.com/robinhood/archive/2006/11/16/515412.html] 上次发贴没能很好的总结Javascrip编写类的方法,这次 ...
- 《JavaScript面向对象精要》——1.8 原始封装类型
本节书摘来自异步社区<JavaScript面向对象精要>一书中的第1章,第1.8节,作者:[美]Nicholas C. Zakas 译者: 胡世杰 更多章节内容可以访问云栖社区" ...
- 《JavaScript面向对象编程指南》——第1章 引言1.1 回顾历史
本节书摘来自异步社区<JavaScript面向对象编程指南>一书中的第1章,第1.1节,作者: [加]Stoyan Stefanov 译者: 凌杰 更多章节内容可以访问云栖社区" ...
- 《JavaScript面向对象编程指南》——1.3 分析现状
本节书摘来自异步社区<JavaScript面向对象编程指南>一书中的第1章,第1.3节,作者: [加]Stoyan Stefanov 译者: 凌杰 更多章节内容可以访问云栖社区" ...
- JavaScript面向对象及原型 及setTimeout
JavaScript面向对象 最笨的写法: function Foo(n) { this.name = n; this.sayName = function() { c ...
- JavaScript面向对象的支持(7)
================================================================================ Qomolangma OpenProj ...
- (二)Javascript面向对象编程:构造函数的继承
Javascript面向对象编程:构造函数的继承 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承&q ...
最新文章
- No service of type Factory available in ProjectScopeServices
- 院士谈如何做好研究生:要逼着自己去想问题,最大的浪费是聪明人不思考
- Python 0/1背包、动态规划
- SourceTree安装破姐添加SSH KEY以及拉取代码教程(附资源下载)
- jquery基本操作笔记
- 字体Times New Roman
- 搭建网站必不可少的知识14
- 利用Python进行「基金投资组合优化」(一)
- mysql workbench for ubuntu测试
- 2.8.13 hadoop体系之离线计算-HBase数据库-HBase的优化
- 游戏测试和软件测试有什么区别?
- matlab从mp4文件中提取音频,如何提取mp4视频中的音频文件 将视频转换为MP3音频...
- 常识性知识,高速快捷知识
- html 按钮 水波纹,点击按钮出现水波纹动画
- Field II 超声声场仿真(3): 脉冲-回波响应(原理代码)
- 基于STM32的ESP8266使用教程(二)
- 身份证OCR识别工作原理及流程
- 什么是脚本语言?什么是解释性语言?什么是编译性语言?
- 细讲逻辑斯蒂回归与朴素贝叶斯、最大熵原理的爱恨交织(五)
- 音频编解码标准G.711与G.729