js中var的使用WORD版_第1页
js中var的使用WORD版_第2页
js中var的使用WORD版_第3页
js中var的使用WORD版_第4页
js中var的使用WORD版_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.js 中 var 的使用使用 VAR 关键申明var myObj=tt:,push:function(val)this.tt.push(val);,pop:function()alert(this.tt.pop();通过这样的方式申明的我们称之为一个对象,而不是类,因为它不能使用 new 关键字进行实例化,再准确点说它是一个变量,但对一个具有方法和属性的变量,我们就通常称之为对象了。如上所示我们定义了一个对象,然后就可以直接 myObj.push(Hello world)设置一个属性,然后使用 myObj.pop()方法就可以弹出我们刚才设置的属性了。二,不使用 var 关键字的申明function myObj2();myOtotype=tt:,push:fuction(val)this.tt.push(val);,pop:function()alet(this.tt.pop);使用如上的方式我们就是认为定义了一个类,然后就可以使用关键字 new 进行实例化了,每一个实例都拥有一份 myObj2 类在prototype 中定义的属性和方法。比如 var tmp=new myObj2();就申明.了类 myObj2;就申明了类 myObj2 的一个实例 tmp,然后就可以使用tmp.push(hello)和 tmp.pop()方法进行操作了。这是 JS 中类和对象的区别!好了,我们开始正式说说如何在 JS 中实现类的继承。function subObj();subOtotype=getLength:fuction()alert(this.tt.length);可以遍历 myObj2 的属性和方法,然后 copy 到 subObj 中来,var extender=extend:function(_sub,_fat)for(p in_fat)_subp=_fatp;实现类 subObj 继承 myObj2,代码如下function _test()extender.extend(subOtotype,myOtotype);var tmp=new subObj();tmp.getLength();tmp.push(Hello world);tmp.Length();.JS 的继承实现方式,大体上就是两种:对象冒充,原形方式。(一)对象冒充function A(name)=name;this.sayHello=function()alert(+say hello!);function B(name,id)this.temp=A;this.temp(name); delete this.temp;this.id=id /防止在以后通过引用覆盖超类 A 的属性和方法this.checkId=function(ID)alert(this.id=ID);当构造对象 B 的时候,调用 temp 相当于启动 A 的构造函数,注意这里的上下文环境中的 THIS 对象是 B 的实例,所有在执行构造函数脚本时,所有 A 的变量和方法都会赋值给予 THIS 所指的对象,即 B的实例,这样子就达到 B 继承 A 的属性方法的目的。之后删除临时引 temp,是防止维护 B 中对 A 类对象(注意不是实例对象)的引用更改,因为更改 temp 会直接导致类 A(注意不是类 A 的对象)结构.的变化。缺点:所有有的实例都会拥有一份成员产方法的副本这是对内存资源的浪费例子 2function Rect(width,height)this.width=width;this.height=height;this.area=function()return this.width*this.height;function myRect(width,height,name)Rect.call(this,width,height);=name;this.show=function()alert(+with area:+this.area();call:调用一个对象的一个方法,以另一个对象替换当前对象。call(thisOb,arg1.arg2)这也是一种对象冒充的继承,其实在 CALL 方法调用的时候发生的事.情也是上下文环境变量 this 的替换。在 myRect 的函数体中 this 肯定是指向类 myRect 对象的实例了,然而用这个 this 作为上下文环境变量调用名字叫 Rect 方法,即类 Rect 的构造函数。于是此时调用 Rect 时候对 this 的赋值属性和方法都实际上是对一个 myRect 的对象进行。所以说尽管 call 和 apply 并不是仅仅为了继承而新增的方法,但用它们可以模拟继承。(二)原型方法,是指利用了 prototype 或者说以某种方式 覆盖了prototype,从而达到属性方法复制的目的。function Person()=Mike;this.sayGoodbye=functionalert(GoodBye);Ptotype.sayHello=function()alert(hello);fucntion Student()Stotype=new Person();关键是对最后一句 Student 原形属性赋值为 Person 类构造的对象。JS 对象在读取某个对象属性的时候,总是先查看自身域的属性列表,如果有就返回否则去读取 prototype 域(每个对象共享构造对象的类的 prototype 域所有属性和方法) ,如果找到就返回,由于 prototype可以指向的对象,所以 Js 解释器会关照的去查找 prototype 域指向的 prototype 域。直到 prototype 为本身,查找变成了一种循环,就停止,此时还没找到就成 undefined 了。这样年来最后一句发生的.效果就是将父类所有属性和方法连接到子类的 prototype 域上,这样子就继承了父类所有的属性和方法。缺点父类的构造函数时不能带领参数。因为对子类 prototype 域的修改是在声明子类对象之后才能进行,用子类构造函数的参数去初始化父类属性是无法实现的,综合方式:function Person(name)=name;Ptotype.sayHello=function()alert(+sa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论