- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JS之面对对象设计 第一章 Js的执行过程
/*** 原创作品,未经允许不得转载!* lwx0108@**/JS之面对对象设计 第一章 Js的执行过程? ???做程序不仅要知其然,更要知其所以然!Js的执行是一个比较复杂的过程,在Js(一般是对象或函数,以下同)的执行过程中有一个执行环境链的概念(这东西比较抽象),当Js被执行的时候,当前的环境就会被插入到Js的环境链的前端,而Js的关键字this,就始终手指向这个执行环境的最前端,所以说Js执行环境的改变,也会引起this指向的改变。当Js执行结束的时间如果该执行环境没有被其他Js引用的时候,当前的执行中环境就会被垃圾回收器回收,否则就会被继续保留。可能这样说有些抽象,就拿上次的那个例子吧:scriptlanguage=javascript type=text/javascriptfunction test(){//暂且叫这为执行环境Athis.id=1;return function(){//暂且叫这为执行环境Balert(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)