初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方式来解决面向对象的问题。所以JavaScript也是一门面向对象的语言。(李昌辉)

面向对象仅仅是一个概念或者编程思想而已,它不应该依赖于某个语言存在。比如 PHP采用面向对象思想构造其语言,它实现了类、继承、派生、多态、接口等机制。但是这些机制,只是实现面向对象编程的一种手段,而非必须。换言之,一门语言可以根据其自身特性选择合适的方式来实现面向对象。因而先入为主地接受了"类"这个面向对象实现方式。

JavaScript不同于其它语言,它是通过原型(prototype)的方式来实现面向对象编程的,也就是说对象(object)是依靠构造器(constructor)利用原型(prototype)构造出来的,而有时也称它为伪类。

下面说一下面向对象的实现方式,为了好理解,我们借鉴其它语言中类和对象的思想来简单分析一下:

一:最简单的面向对象(即使用JSON方式来声明)

定义一个伪类:

var Ren = {
name:"张三", //相当于成员变量
sex:"男", //相当于成员变量
age:18, //相当于成员变量
say:function(){ //相当于成员方法
alert("讲话");
}
};

调用类里面的成员:

Ren.say();

通过上面的例子可以看出来,该类里面的成员相当于其它语言里面的静态成员,通过类名调用。
这种方式基本可以满足开发的需求,但是相对于其它语言来说没有实现封装、继承和多态,所以代码的重用性比较差。

二:使用原型的方式(函数构造器)

定义一个类:

function Ren(){
var name="张三"; //私有的成员变量
var sex ="男"; //私有的成员变量
this.PublicName="zhangsan", //公有的成员变量
this.setName = function(_name){ //成员方法
name=_name;
}
this.getName = function(){ //成员方法
return name;
}
}

造对象并且调用对象的成员:

var r = new Ren();
r.getName();

在创建对象的时候,会运行类似于这样的代码,使用构造器来创建对象:

this.prototype = {constructor: this}

函数的prototype的属性的值被作为原型对象来克隆出新对象。

虽然使用new运算符调用函数看起来像是使用模板实例化的方式来创建对象,但本质还是以原型对象来克隆出新对象,目前我们看它像是一个类,但还有一点就是每new Ren(),不但属性产生副本,方法也会产生副本。

如果不想让方法产生复本,它提供了prototype这个属性,即原型。所有实例都会共享它里面的属性和方法。

可以在定义对象的时候:把属性放到定义里,而把对象的方法放到原型里!

如下:

function Ren(name, age) {
this.name = "张三";
this.age = 18;
}; Ren.prototype.say = function(){ //方法放在原型里面
alert("hello");
};

调用该成员方法:

var r = new Ren();
r.say();

以上两种方式都可以实现JavaScript中的面向对象,实际上每种语言的面向对象思想都是一致的,只是方法有所不同而已,在JavaScript这门强大的语言里面依然是有面向对象存在的只是我们学习了其它语言的面向对象之后,有种先入为主的感觉,对JavaScript的面向对象产生疑惑,所以一定谨记面向对象是一种思想,不是一种方法。

简单分析JavaScript中的面向对象的更多相关文章

  1. 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型

    前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...

  2. 前端开发:javascript中的面向对象

    前端开发:面向对象与javascript中的面向对象实现(一) 面向对象理解: 面向对象是一种对现实世界理解和抽象的方法,是一种先进的程序设计理念,是一种比较抽象的,多形态的设计模式.我们可以这么理解 ...

  3. JavaScript从初见到热恋之深度讨论JavaScript中的面向对象。

    JavaScript中的面向对象.面向对象的三个基本特征:封装.继承.多态. 1.封装 js的封装如下 定义Person类 function Person(name,age,sex) { this.n ...

  4. 如何理解并学习javascript中的面向对象(OOP) [转]

    如果你想让你的javascript代码变得更加优美,性能更加卓越.或者,你想像jQuery的作者一样,写出属于自己优秀的类库(哪怕是基于 jquery的插件).那么,你请务必要学习javascript ...

  5. 前端开发:面向对象与javascript中的面向对象实现(一)

    前端开发:面向对象与javascript中的面向对象实现(一) 前言: 人生在世,这找不到对象是万万不行的.咱们生活中,找不到对象要挨骂,代码里也一样.朋友问我说:“嘿,在干嘛呢......”,我:“ ...

  6. 深入理解javascript中实现面向对象编程方法

    介绍Javascript中面向对象编程思想之前,需要对以下几个概念有了解: 1. 浅拷贝和深拷贝:程序在运行过程中使用的变量有在栈上的变量和在堆上的变量,在对象或者变量的赋值操作过程中,大多数情况先是 ...

  7. JavaScript中的面向对象程序设计

    本文内容目录顺序: 1.Object概念讲述: 2.面向对象程序设计特点: 3.JavaScript中类和实例对象的创建: 4.原型概念: 5.原型API: 6.原型对象的具体使用:7.深入理解使用原 ...

  8. 领悟 JavaScript 中的面向对象

    JavaScript是基于对象的语言,我们可以使用面向对象的思想去开发js代码. JavaScript是基于对象的语言. 可以使用面向对象的思想,但是不少人对这一点理解得并不全面. 在 JavaScr ...

  9. JavaScript中的面向对象的讨论(转)

    前言 今天,WEB2.0时代的到来,给了JavaScript又一次大展身手的机会.Web2.0借助JavaScript技术,使得客户端的Web体验更加丰富多彩,同时JavaScript面对的问题域也变 ...

随机推荐

  1. AutoMapper

    什么是AutoMapper? AutoMapper是一个对象和对象间的映射器.对象与对象的映射是通过转变一种类型的输入对象为一种不同类型的输出对象工作的.让AutoMapper有意思的地方在于它提供了 ...

  2. 基于RN开发的一款视频配音APP(开源)

    在如今React.ng.vue三分天下的格局下,不得不让自己加快学习的脚步.虽然经常会陷入各种迷茫,学得越多会发现不会的东西也被无限放大,不过能用新的技术作出一些小项目小Demo还是会给自己些许自信与 ...

  3. c# 基础 object ,new操作符,类型转换

    参考页面: http://www.yuanjiaocheng.net/webapi/config-webapi.html http://www.yuanjiaocheng.net/webapi/web ...

  4. 用django创建一个项目

    首先你得安装好python和django,然后配置好环境变量,安装python就不说了,从配置环境变量开始 1.配置环境变量 在我的电脑处点击右键,或者打开 控制面板\系统和安全\系统 -> 左 ...

  5. Struts的文件上传下载

    Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...

  6. Java集合---ConcurrentHashMap原理分析

    集合是编程中最常用的数据结构.而谈到并发,几乎总是离不开集合这类高级数据结构的支持.比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap).这篇文章主 ...

  7. 2DToolkit官方文档中文版打地鼠教程(二):设置摄像机

    这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...

  8. 豪情-CSS解构系列之-新浪页面解构-01

    目录: 一. 新浪的布局特点 二. 内容细节的特点 三. 其中相关的一些基础技术点 1. 常见布局方法 2. 布局要点 3. Debugger误区 4.列表 5.字体颜色 6.CSS选择符 7.CSS ...

  9. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  10. 【腾讯Bugly干货分享】Android动态布局入门及NinePatchChunk解密

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57c7ff5d53bbcffd68c64411 作者:黄进——QQ音乐团队 摆脱 ...