找回密码
 快速注册

QQ登录

只需一步,快速开始

查看: 2007|回复: 4

为什么说JavaScript是基于对象的语言?

[复制链接]
拉莫斯 发表于 2011-2-24 22:43:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?快速注册

×

“JavaScript不是面向对象的语言”

    我想说这句话的时候,没有人反对。

    那么什么是面向对象?

    简单地讲,“面向对象就是把现实中的事物抽象化”,“面向对象这个词也许让它叫做面向抽象更加贴切”。

    定义一: 面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方法。

    定义二: 面向对象方法是以认识论为基础,用对象来理解和分析问题空间,并设计和开发出由对象构成的软件系统(解空间)的方法。 由于问题空间和解空间都是由对象组成的,这样可以消除由于问题空间和求解空间结构上的不一致带来的问题。简言之,面向对象就是面向事情本身,面向对象的分析过程就是认识客观世界的过程。

    JavaScript中有对象的概念吗?

    有,看看这样的脚本,这样写是正确的:

var obj =
new Object();
obj.width
=
12;
alert(obj.width);

    但是JavaScript没有继承的概念,进而也没有多态的概念,事实上,每个JavaScript对象是相同基类的实例。

    很多人没有区分“面向对象”和“基于对象”两个不同的概念。面向对象的三大特点(封装,继承,多态)缺一不可,通常“基于对象”使用对象,但是无法利用现有的对象模板产生新的对象类型,继而产生新的对象,也就是说“基于对象”没有继承的特点,而“多态”是表示为父类类型的子类对象实例,没有了继承的概念也就无从谈论“多态”,缺少了继承和多态的特性,JavaScript就只是个基于对象的语言。

2006-10-30记:
今天在看jQuery.js时。看到prototype.js相关的一点东西,说到JavaScript的继承。可能我一开始就错了,希望没有误导别人,内容如下:

类的继承其实javascript本身就支持的,不过prototype提供了一种另外的方法。
按照javascript的支持的实现:

var Student=Class.create();
      Student.prototype
=new Person();

      这样就实现了Student继承至Person。
      在使用prototype的情况下可以这么实现:


var Student=Class.create();
      Object.extend(Student.prototype,Person.prototype);

      子类要增加方法时可使用

Student.prototype.study=function(){};

      或

Object.extend(Student.prototype,{
           study:
function(){}
}
);



原文地址http://www.cnblogs.com/yao/archive/2006/09/13/503584.html
kiros 发表于 2011-2-25 00:07:12 | 显示全部楼层
小莫莫这两天学JS快疯了···休息···休息一会···
回复

使用道具 举报

宋中 发表于 2011-2-25 17:02:39 | 显示全部楼层
lz狂人····
回复

使用道具 举报

 楼主| 拉莫斯 发表于 2011-2-27 00:12:21 | 显示全部楼层
这是利用原型做继承的模拟

有意者也可以做关于子类方法覆盖父类方法的实验,比较有趣;
function Video(id,name){

Video.prototype.copyright = "本视频信息由 www.jinzhiit.com 提供";

this.vid = id;

this.name = name;



this.play = function(){

document.write("<br>开始播放视频:"+this.vid+" >>>>>" + this.name);

document.write("----"+this.copyright);

}





}



function RmVideo(id,name,time){

this.superClass = Video;

this.superClass(id,name);



this.time = time;



this.show =function(){

this.play();

document.write("视频类型 RM 时间"+time+"分钟!");

}

}
var v1 = new RmVideo(1,"阿凡达",90);
v1.show();感谢金智IT教育提供例题

显然也可以这么写;
var rmvideo = class.create();
rmvideo.prototype = new video()看来我理解还是有欠缺,得明天再思考思考;
睡了



回复

使用道具 举报

 楼主| 拉莫斯 发表于 2011-2-27 00:20:00 | 显示全部楼层
这里推荐大家一个有用的小工具,always on top 使用快捷键ctrl alt + t可以是当前窗口置顶,对于我们一边看源代码,一边在ide上试验很有帮助;最近学jsp,我用写字板打开html文件,再用aptana写。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?快速注册

×

点评

YKJ
already running....你懂得 。。。  发表于 2011-2-27 00:36
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

快速回复 返回顶部 返回列表