JAVASCRIPT面向对象.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JS之面对对象设计 第一章 Js的执行过程 /** * 原创作品,未经允许不得转载! * lwx0108@ **/ JS之面对对象设计 第一章 Js的执行过程 ? ???做程序不仅要知其然,更要知其所以然! Js的执行是一个比较复杂的过程,在Js(一般是对象或函数,以下同)的执行过程中有一个执行环境链的概念(这东西比较抽象),当Js被执行的时候,当前的环境就会被插入到Js的环境链的前端,而Js的关键字this,就始终手指向这个执行环境的最前端,所以说Js执行环境的改变,也会引起this指向的改变。当Js执行结束的时间如果该执行环境没有被其他Js引用的时候,当前的执行中环境就会被垃圾回收器回收,否则就会被继续保留。 可能这样说有些抽象,就拿上次的那个例子吧: scriptlanguage=javascript type=text/javascript function test(){ //暂且叫这为执行环境A this.id=1; return function(){ //暂且叫这为执行环境B alert(this.id); } } function assignEvent(){ document.getElementById(test).onclick=test(); /** *注意此处,test()返回一个无名的函数,在这个无名的函数里保持着 *对this.id的引用,所以垃圾回收器不会清理test(),所占用的内存空 *间,这时执行环境B在test()执行环境的最前端,A紧随其后,this指 *向执行的执行环境B,但是当用户点击id等于test的元素之后,test元 *素就会被插入到执行环境的最前端,而且此时test元素恰有一个叫 *id的属性,所以弹出的对话框就显示为test **/ } /script 在Js中this的指向非常的复杂,而且不同的浏览器会有不同的结果(想必大家都知道这个浏览器是谁,对,就是那个垃圾的IE),在IE里面,当在元素里注册一个事件之后,this会指向window而不是被注册事件的元素!(真想不明白开发IE的那么大师是怎么想的,可能这就是牛人的思维吧,汗!)。如果此处有什么不明白可以忽略,如果有机会讲事件模型的话,会着重讲这点的! 其实要避免上面所说的问也很简单,只要把test函数略微改动一下就可以了! function test(){ var _this = this;//我称这个叫全局变量局部化(大家同意否,要不来个投票!) _this.id=1; return function(){ alert(_this.id); } } JS之面对对象设计 第二章 Js中变量的查找过程 /** * 原创作品,未经允许不得转载! * lwx0108@ **/? ? ?? ? ?? ?做程序不仅要知其然,更要知其所以然! Js里的变量应该分两种(我个人的分法,如果有雷同,纯属巧合,呵呵),一种是一般的变量,而另一种我称之为属性变量: function auth(){ var name=lwx;//这个叫变量 } var auth={ name:lwx;//我叫这个为属性变量 } function auth(){ =lwx;//这个也叫属性变量,看看和第一个有什么不同? } 这两种形式的变量查找方式是不一样的。 -、在函数的执行过程中,一般变量是只在当前的执行环境和全局变量中查找,而且这里还有一个细节,就是不管你在函数的什么地方声名一个变量,它都会掩盖掉全局变量中的同名变量,并且在你给他赋初值之前它都会赋成undefined。(注意了!多说几遍这句话!) 还是举例说明一下! var name=shiran;//全局变量 function auth(){ alert(name); /** *注意了,因为在函数中有与全局变量同名的变量,所以局部变量会在整个 *函数中把全局变量掩盖掉,所以这里的name本质上局部变量name!如果把 *下面这条语句去掉,name就成全局变量中的那个name了!! **/ var name=lwx;//局部变量 } 但是如果换成属性结果就不样了!看例子: var name=shiran; function auth(){ alert(); =lwx; } =test; ? ?? ? 下面这句放到body里面, div??id=test??name=testtests/div ? ?? ? 注意,一定要睁大眼睛看清楚了!怎么可能,怎么点击一下和点击两下的结果不一样(没办法他就是不一样!)!!!为啥呢!? 这是因为属性是跟对象关联的(在Js里面函数也是对象!查找过程中多了上下文查找),当用户第一次点击的时候,程序执行到alter时,auth对象里还没有一个叫

文档评论(0)

80092355km + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档