`
- 浏览:
1933776 次
- 性别:
- 来自:
北京
-
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
<htmlxmlns="http://www.w3.org/1999/xhtml">
-
<head>
-
<title>javascript面向对象编程</title>
-
<scriptsrc="Scripts/jquery-1.4.1-vsdoc.js"type="text/javascript"></script>
-
<scripttype="text/javascript">
- $(function(){
- //functionanimal(name){
-
//this.name=name;
-
//this.age=0;
- //}
-
//vara1=animal;
- //alert(a1);//弹出整个函数体
-
//vara2=animal("dinglang");
- //alert(a2);//弹出undefined
-
//vara3=newanimal();
- //alert(a3);//弹出object
-
//vara4=newanimal;
- //alert(a4);//弹出object
- //求值
- //alert(sum(1,3));//要求弹出结果为4
- //alert(sum(1,3,5,4,7));//要求弹出结果为20
- //根据java或者C#的编程经验,首先想到的是函数重载。
- //functionsum(a,b){
- //returna+b;
- //}
- //functionsum(a,b,c,d,e){
- //returna+b+c+d+e;
- //}
- //不幸的是,javascript并不支持函数重载。如果照上面那么写,只有下面的那个函数才会生效
- //javascript支持可变参数的函数
- functionsum(){
-
varn=0;
-
for(vari=0;i<arguments.length;i++){
- n+=arguments[i];
- }
- returnn;
- }
- //javascript高级知识--闭包
- //函数里面嵌套函数,且在外部被引用了,所以这个对象i不会被垃圾回收机制清除,所以i递增
- functionf1(){
-
vari=0;
-
varf2=function(){
- i++;
- alert(i);
- }
- returnf2;//f2对象指的是整个函数体
- }
-
varf3=f1();//"f1()"就是指该函数的执行结果或者返回值--f2
- //f3();//1
- //f3();//2
- //f3();//3
- //作用域与this关键字
-
//varobj=newObject();
-
//obj.v="visaobject";
- ////相当于这么写
-
//varobj2={v:"visaobject"};
- //作用域Scope
-
varb1={v:"thisisb1"};
-
varb2={v:"thisisb2"};
- functionb(x,y){
- //alert(this.v+","+x+","+y);
- }
- b("ding","lang");//undefined,"ding","lang"
- //调用b函数时,b函数中的this关键字指的是window对象.而Window对象中没有v对象,所以undefined
- //window.b("ding","lang");//undefined,"ding","lang"--与b("ding","lang");意义相同
- //b.call();//就等于b();
- //call函数的第一个参数表示的是函数的上下文--表示b函数中的this所以this关键字=b1
- //b.call(b1,"ding","lang");//thisisb1,ding,lang
- //注意apply函数的用法:第一个参数表示的也是函数中的上下文。不过后面的参数要以数组的形式传递
- //b.apply(b2,["ding","lang"]);////thisisb1,ding,lang
- //关于作用域,再补充一点
-
varb3={v:"thisisb3",
- sayHello:function(){
- alert(this.v);
- }
- }
- //b3.sayHello();//thisisb3
- //b3.sayHello.call(b1);//会调用b1对象中的sayHello函数--thisisb1
- //for...in
-
//vararr=newArray();//new一个js数组,与c#、java等编程语言不同,可以不指定长度
- //arr[0]=1;//赋值
- //arr[1]=2;
- //arr[2]=3;
- //javascript支持直接定义赋值
-
vararr=newArray(1,2,3);
-
for(vari=0;i<arr.length;i++){
- //alert(arr[i]);//弹出1,2,3
- }
- //注意:javascript中的for...in,看起来与C#或者java中的foreach类似,但是不同
- for(varkeyinarr){
- //alert(key);//弹出0,1,2key指的是键,而不是值。在C#的foreach中,“in”前的变量指的是值
- //alert(arr[key]);//可以使用这种方式取值--key指的是键,也就是某个对象中包含的所有的对象,而不是值
- }
- //假如我没有firebug,想使用IE实现类似与firebug控制台中console.dir的功能,可以这样
- for(varkeyinwindow){
- //这样就能将window对象中,包含的全部对象迭代显示出来。也就实现了firebug中console.dir的功能
-
//document.getElementById("key").innerHTML+=(key+":"+window[key]+"</br>");
- }
- //对象的删除(释放内存--在extjs组件中常用)
- //deleteb3.v;//删除b3对象中的v成员
- //alert(b3.v);//undefined--因为v这个成员已经被删除了
- //类的修改,扩展(重点,难点)
- //1.假如我要实现一个简单的加法计算
-
//varnumOne=5;//如果直接这么定义,那么下面的numOne.add(8);执行会报错
- //如果我这么写,下面调用就不会报错了(因为此时的numOne,是个类.相当于java或C#语言中原始的基本数据类型、包装类型)
-
varnumOne=newNumber(5);
-
numOne.add=function(numTwo){
- returnthis+numTwo;
- }
- //alert(numOne.add);//undefined
- //alert(numOne.add(8));//这样写看起来没错,但是会报错--numOne.addisnotafunction
-
varnumThree=newNumber(100);
- //如果我现在想要给numThree对象中也加上add这么一个函数
- //直接使用prototype这个特殊的属性来实现,给所有的Number类型实例都加入add函数
-
Number.prototype.add=function(numTwo){
- returnthis+numTwo;
- }
-
alert(numThree.add(200).add(300));//弹出600100+200+300=600
- //说明所有的Number类型确实都具有了add这么一个函数超级延时绑定--类的扩展
- //小例子--扩展String类,给所有的String类加上sayILoveYou
-
//String.prototype.sayILoveYou=function(){
- //alert(this.toString()+",ILoveYou");
- //}
-
//varstrOne="dinglang";
- //strOne.sayILoveYou();
- //javascript中的类的用法
- //使用构造函数的方式,定义简单的Person类(javascript函数也是一个类)
- functionPerson(name){
-
this.name=name;
-
this.age=20;
-
varyear=2010;//定义一个私有的成员sex
-
//this.sayHello=function(){
- //alert(this.name+":今年"+this.age+"岁,HelloWold");
- //可以直接在这里面定义sayHello成员函数(特权方法),但是每次实例化该类的时候都会重新去定义,所有还是选择用prototype属性的方式
- //如果在sayHello函数中要使用year这个私有对象,就可以直接在此定义这个特权方法。这就是典型的“闭包”。
- }
- //如果使用了new关键字,说明Person就是一个类。否则的话,只是一个普通的函数
-
varp1=newPerson("丁浪");//new一个Person类的实例
-
varp2=newPerson("蔡世友");//注意:别按照java或者C#的习惯,写成了Personp=newPerson("XXX");
- //给Person这个自定义的类,添加一个sayHello函数
-
Person.prototype.sayHello=function(){
- alert(this.name+":今年"+this.age+"岁,HelloWold");
- }
- p1.sayHello();
- p2.sayHello();
- //实现javascript中的继承
- functionclassA(name){
-
this.name=name;
-
this.showName=function(){
- alert(this.name);
- }
- }
- functionclassB(name){
- //1)使用newMethod的方式实现继承
-
//this.newMethod=classA;
- //this.newMethod(name);
- //deletethis.newMethod;//释放对象
- //2)调用claasA这个函数,并把他的上下文(作用域)指向this(也就是classB类的实例)
- //这样也能实现继承效果(使用call或者apply)
- classA.call(this,name);
- //classA.apply(this,[name]);
- }
-
objA=newclassA("操作系统");
-
objB=newclassB("组成原理");
- objA.showName();//弹出“操作系统”
- objB.showName();//弹出“组成原理”
- })
-
</script>
-
</head>
-
<body>
-
<divid="key"></div>
-
</body>
-
</html>
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
每个JavaScript对象都有一个隐含的原型对象,通过原型链可以实现属性和方法的继承。这种机制允许动态地修改对象的原型,实现灵活的继承和扩展。 在JavaScript中,函数不仅用于执行特定任务,还可以用作事件处理器,...
hksi paper 1 香港证券资格考试卷一 2024最新温习手册
HKSI PAPER1 香港证券期货从业考试温习手册卷一.pdf 本资源是香港证券期货从业考试温习手册的第一卷,旨在帮助考生备战证券及期货从业员资格考试。该手册涵盖了证券及期货行业的规则和规定,涵盖了香港证券及期货...
PAPER1卷一温习手册V3.4版下载 PAPER1卷一温习手册V3.4版下载 PAPER1卷一温习手册V3.4版下载 PAPER1卷一温习手册V3.4版下载 PAPER1卷一温习手册V3.4版下载 PAPER1卷一温习手册V3.4版下载 PAPER1卷一温习手册V3.4版...
PAPER7卷七温习手册V3.3版下载 PAPER7卷七温习手册V3.3版下载 PAPER7卷七温习手册V3.3版下载 PAPER7卷七温习手册V3.3版下载 PAPER7卷七温习手册V3.3版下载 PAPER7卷七温习手册V3.3版下载 PAPER7卷七温习手册V3.3版...
PAPER6卷六温习手册V2.6版下载 PAPER6卷六温习手册V2.6版下载 PAPER6卷六温习手册V2.6版下载 PAPER6卷六温习手册V2.6版下载 PAPER6卷六温习手册V2.6版下载 PAPER6卷六温习手册V2.6版下载 PAPER6卷六温习手册V2.6版...
HKSI Paper 1 60个温习重点.pdf
在Web开发的广阔天地里,通过JavaScript在HTML中实现这一经典示例,不仅是对基础知识的温习,也是对前端技术栈的一次浅尝辄止。本文将带领读者走进这段简单的代码背后,探索其如何将文本内容嵌入到网页之中,从而与...
### 批处理使用技巧详解 #### 一、批处理(Batch)概述 批处理是一种用于自动化执行一系列命令或脚本的技术,在早期的DOS系统中非常流行。它可以通过创建一个扩展名为`.bat`(在DOS系统下)或`.cmd`(在Windows NT...
Java是一种广泛使用的高级编程语言,以其跨平台、面向对象和安全性等特点受到广大开发者的青睐。这份“资料java温习资料实用教案.pptx”主要涵盖了Java编程的基础知识、考试范围以及重点难点,为学习者提供了一份...
今天重新温习java书籍,看到面向对象章节,为了更好的理解面向对象含义,特意写了这样一个小程序,希望与大家分享
回首温习青春.docx
从上述内容来看,这篇笔记中涉及了JavaScript的基础知识,包括基本语法、DOM操作、字符串与数学操作、表单处理、浏览器对象模型、事件处理等,这是学习JavaScript的重要组成部分。尽管部分信息可能有些过时,但大...
校园网络计划温习资料.pdf
网上支付与结算温习.pdf
期末温习总结初中作文.doc
GSM温习考试题答案.pdf