您当前的位置:首页 > 互联网教程

js面向对象的几种方式

发布时间:2025-05-20 16:28:26    发布人:远客网络

js面向对象的几种方式

一、js面向对象的几种方式

1、JavaScript中对象的创建有以下几种方式:

2、JavaScript可用的内置对象可分为两种:

3、1,JavaScript语言原生对象(语言级对象),如String、Object、Function等;

4、2,JavaScript运行期的宿主对象(环境宿主级对象),如window、document、body等。

5、我们所说的使用内置对象,是指通过JavaScript语言原生对象的构造方法,实例化出一个新的对象。如:

6、var str= new String("实例初始化String");

7、var func= new Function("x","alert(x)");//示例初始化func

8、var o= new Object();//示例初始化一个Object

9、Notation)即JavaScript对象命名,是一种轻量级的数据交换格式,易于阅读和编写,同时也易于及其解析和生成。它基于

10、《JavaScript Programming Language, Standard ECMA-262 3rd Edition-

11、December 1999》的一个子集。JSON是完全独立于语言的文本格式,因此成为数据交换的理想格式。

12、JavaScript的一个自己,同时ActionScript、C、C#、ColdFusion、E、Java、JavaScript、ML、

13、ObjectiveCAML、Perl、PHP、Python、Rebol、Ruby、Lua等一系列的语言都提供支持,使得JSON成为Ajax开发的

14、JSON有两种构建方式,一种是采用简单的“键/值对”的集合,在不同的语言中被理解为对象、记录、结构、字典、哈希表、有键列表,或者关联数组等,另一种采用有序的值列表,大部分语言把它理解为数组。

15、常用的创建方式是第一种,即采用“键/值对”集合的形式。在这种形式下,一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号),“

16、‘键/值'对”之间使用“,”(逗号)分隔。

17、JSON具有以下特点:(1)简单格式化的数据交换;(2)易于人们的读写习惯;(3)易于机器的分析和运行。

18、在JavaScript中,JSON被理解为对象。通过字符串形式的JSON,数据可以很方便地解析成JavaScript独享,并进行数据的读取传递。通过JSON,在一定程度上客服了JavaScript对象无法作为参数系列化传递的问题。

19、{name:"刘德华",age:"25",sex:"男"}

20、JSON的值可以是简单的数据类型,例如数字、浮点、字符等,也可以是数组及对象。例如以数组作为member键值的JSON:

21、{member:[{name:"刘德华"},{name:"郭富城"},{name:"张学友"},{name:"黎明"}]}

22、book:[{name:"三国演义"},{name:"西游记"},{name:"水浒传"},{name:"红楼梦"}],

23、author:[{name:"罗贯中"},{name:"吴承恩"},{name:"施耐安",{name:"曹雪芹"}}]

24、JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或者工具包,JavaScript默认将JSON当做一个对象处理。

25、book:[{name:"三国演义"},{name:"西游记"},{name:"水浒传"},{name:"红楼梦"}],

26、author:[{name:"罗贯中"},{name:"吴承恩"},{name:"施耐安",{name:"曹雪芹"}}]

27、JSON的每个“键”相当于对象的属性,例如访问book中的第一个条目,在JavaScript中,就可以简单地使用“somebooks.book[0].name”来获取“三国演义”这个值。

28、我们不但可以将一个JSON字符串转化为对象,反过来将一个对象“编译”为一个JSON字符串,以方便JavaScript中的对象的传输。例如:

29、Animals对象无法被序列化传输,将Animals对象转化为JSON字符串,也就是“{name:"dog",sex:"Male",age:"2"}”。这样,把该JSON字符串作为HTTP请求的一个参数传递,从而达到序列化传输Animals对象的目的。

30、(ii)JSON通过字符串形式来表达JavaScript的对象。如:

31、var myObject={nickname:"my girlfried",name:"big

32、实际上充当了一种在JavaScript对象和字符串之间实现相互转换的协议。由于JSON的“外表”可以看成但村的字符串,因此JSON在

33、JavaScript的对象传输方面可以起到一定的作用。例如把对象strObject转换成字符串后进行传输,在达到目的地后通过eval方法将其还原

34、var strObject='{nickname:"my girlfriend",name:"big pig"}';

35、test(eval_r("("+ strObject+")"));

36、创建高级对象构造有两种方式:使用“this”关键字构造、使用原型prototype构造。如:

37、//使用this关键字定义构造的上下文属性

38、Girl.prototype.name="big pig";

39、上例中的两种定义在本质上没有区别,都是定义“Girl”对象的属性信息。“this”与“prototype”的区别主要在于属性访问的顺序。如:

40、Test.prototype.test= function()

41、alert("defined by prototype");

42、_o.test();//输出“defined by this”

43、当访问对象的属性或者方法是,将按照搜索原型链prototype

44、chain的规则进行。首先查找自身的静态属性、方法,继而查找构造上下文的可访问属性、方法,最后查找构造的原型链。

45、与“prototype”定义的另一个不同点是属性的占用空间不同。使用“this”关键字,示例初始化时为每个实例开辟构造方法所包含的所有属性、方法

46、所需的空间,而使用“prototype”定义,由于“prototype”实际上是指向父级的一种引用,仅仅是个数据的副本,因此在初始化及存储上都比

二、如何理解并学习javascript中的面向对象

1、对象与对象之间使用消息通信,各自存在信息隐藏

2、以这三点做为依据,C++是半面向对象半面向过程语言,因为,虽然他实现了类的封装、继承和多态,但存在非对象性质的全局函数和变量。Java、C#是完全的面向对象语言,它们通过类的形式组织函数和变量,使之不能脱离对象存在。但这里函数本身是一个过程,只是依附在某个类上。

3、然而,面向对象仅仅是一个概念或者编程思想而已,它不应该依赖于某个语言存在。比如 Java采用面向对象思想构造其语言,它实现了类、继承、派生、多态、接口等机制。但是这些机制,只是实现面向对象编程的一种手段,而非必须。换言之,一门语言可以根据其自身特性选择合适的方式来实现面向对象。所以,由于大多数程序员首先学习或者使用的是类似 Java、C++等高级编译型语言(Java虽然是半编译半解释,但一般做为编译型来讲解),因而先入为主地接受了“类”这个面向对象实现方式,从而在学习脚本语言的时候,习惯性地用类式面向对象语言中的概念来判断该语言是否是面向对象语言,或者是否具备面向对象特性。这也是阻碍程序员深入学习并掌握 JavaScript的重要原因之一。

4、实际上,JavaScript语言是通过一种叫做原型(prototype)的方式来实现面向对象编程的。基于类的(class-based)面向对象和基于原型的(prototype-based)面向对象这两种方式在构造客观世界的方式上的差别。

5、基于类的面向对象和基于原型的面向对象方式比较

6、在基于类的面向对象方式中,对象(object)依靠类(class)来产生。而在基于原型的面向对象方式中,对象(object)则是依靠构造器(constructor)利用原型(prototype)构造出来的。举个客观世界的例子来说明二种方式认知的差异。例如工厂造一辆车,一方面,工人必须参照一张工程图纸,设计规定这辆车应该如何制造。这里的工程图纸就好比是语言中的类(class),而车就是按照这个类(class)制造出来的;另一方面,工人和机器(相当于 constructor)利用各种零部件如发动机,轮胎,方向盘(相当于 prototype的各个属性)将汽车构造出来。

7、事实上关于这两种方式谁更为彻底地表达了面向对象的思想,目前尚有争论。但笔者认为原型式面向对象是一种更为彻底的面向对象方式,理由如下:

8、首先,客观世界中的对象的产生都是其它实物对象构造的结果,而抽象的“图纸”是不能产生“汽车”的,也就是说,类是一个抽象概念而并非实体,而对象的产生是一个实体的产生;

9、其次,按照一切事物皆对象这个最基本的面向对象的法则来看,类(class)本身并不是一个对象,然而原型方式中的构造器(constructor)和原型(prototype)本身也是其他对象通过原型方式构造出来的对象。

10、再次,在类式面向对象语言中,对象的状态(state)由对象实例(instance)所持有,对象的行为方法(method)则由声明该对象的类所持有,并且只有对象的结构和方法能够被继承;而在原型式面向对象语言中,对象的行为、状态都属于对象本身,并且能够一起被继承(参考资源),这也更贴近客观实际。

11、最后,类式面向对象语言比如 Java,为了弥补无法使用面向过程语言中全局函数和变量的不便,允许在类中声明静态(static)属性和静态方法。而实际上,客观世界不存在所谓静态概念,因为一切事物皆对象!而在原型式面向对象语言中,除内建对象(build-in object)外,不允许全局对象、方法或者属性的存在,也没有静态概念。所有语言元素(primitive)必须依赖对象存在。但由于函数式语言的特点,语言元素所依赖的对象是随着运行时(runtime)上下文(context)变化而变化的,具体体现在 this指针的变化。正是这种特点更贴近“万物皆有所属,宇宙乃万物生存之根本”的自然观点。

三、探讨javascript是不是面向对象的语言

1它拥有对象,可以包含数据和处理数据的方法。对象可以包含其它对象。他没有类(在javascript2.0真正实现之前),但它却有构造器可以做类能做的事,包括扮演变量和方法的容器和角色。他没有基于类的继承,但它有基于原型的继承。两个建立对象系统的方法是通过继承和通过聚合。javaScript两个都有。

2一些评价说javascript不是真正面向对象的因为它不能提供信息的隐藏。也就是,对象不能有私有变量和私有方法:所有的成员都是公共的。但随后有人证明了javaScript对象可以拥有私有变量和私有方法。另外还有批评说javascript不能提供继承,但随后有人证明了javascript不仅能支持传统的继承还能应用其他的代码复用模式。

3说javascript是一种基于对象的语言,是一种正确而略显保守的判断,而说javascript不面向对象,在我看来则是错误的认知,事实上有充足的理由证明javaScript是一种面向对象的语言,只是与传统的基于类的面向对象相比,javaScript有它与众不同的地方,这种独特性我们称它为基于原型的面向对象。

-----------------------------------------

因为js是弱类型语言.不像c++,C#这类型语言!他不支持函数方法重载.你之前写一个方法.后面再写一个相同名字的方法他默认会把上一个方法覆盖掉!这种情况和PHP中相同!

他不像是C#等语言支持函数重载.根据不同的参数.返回值调用不同的方法!

关于JS是不是面向对象.他不完全是面向对象,他也可以写成类,方法,属性.但是和其它的语言稍有不同!比如

这就是他的类,但是缺少了好多面向对象的一些特性.楼上说的很清楚!所以说他不是完全面向对象

面向对象只是一种思路一种解决问题的思路!