为什么说JavaScript是基于对象的语言?
“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
小莫莫这两天学JS快疯了···休息···休息一会··· lz狂人···· 这是利用原型做继承的模拟
有意者也可以做关于子类方法覆盖父类方法的实验,比较有趣;
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()看来我理解还是有欠缺,得明天再思考思考;
睡了
这里推荐大家一个有用的小工具,always on top 使用快捷键ctrl alt + t可以是当前窗口置顶,对于我们一边看源代码,一边在ide上试验很有帮助;最近学jsp,我用写字板打开html文件,再用aptana写。
页:
[1]