javascript设计模式学习之二——this
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript设计模式学习之二——this,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1369字,纯文字阅读大概需要2分钟。
内容图文
一、this指向问题
1)作为对象的方法调用
当函数作为对象的方法被调用时,this指向该对象,如obj.getA();this就指向.之前的函数调用者;据此,事件处理函数内部的this也是指向事件发生的节点;
2)作为普通函数调用
在普通函数中,this指向全局对象window;
3)构造器调用
当使用new运算符调用函数时,该函数会返回一个对象,构造器中的this就指向返回的这个对象;需要注意的是,如果构造器显式返回了一个object类型的对象,那么此次运算结果最终会返回这个对象,构造器中的this也会指向这个对象,而非我们期望的this;
二、this丢失问题
思考下面一个问题,在prototype.js等框架中,做过这样的事情:
var getId=function(id){ return document.getElementById(id); } var oDiv=getId(‘div1‘);
思考为什么不用下面更简单的方式:
var getId=document.getElementById; var oDiv=getId(‘div1‘);
后者会抛出一个异常,这是因为许多引擎的document.getElementById方法的内部会用到this;这个this被期望指向document,当getElementById被作为方法调用的时候,this指向没有问题;但是当用getId来引用documant.lgetElementById的时候,就成了普通函数的调用,其函数内部的this指向了window,而不是期望的doucment;
可以尝试利用下面的方法进行this修正:
document.getElementById=(function(func){ return function(){ func.apply(document,arguments); } })(document.getElementById); var getId=document.getElementById; var div=getId(‘div1‘);
三、call和apply
1.这两个函数可以指定this的指向,apply使用数组或者类数组作为参数,call则参数数量不固定,从这个意义来说,apply比call使用的频率更高;如果传入的首个参数是null,则代表作为普通函数调用,this此时指向window;
2.这两个函数在某些场合下使用的目的不在于指向this,而是用于借用其他对象的方法;比如类数组如arguments添加数据可以借用[].prototype.push.call;转换为真正的数组可以采用[].prototype.slice.call;截取收元素可以借用[].prototype.shift.call;能够借用的关键在于这些函数内部实现原理同样也可适用于类数组的对象;只要满足以下条件:
1)对象本身可以通过数字下标存取属性;
2)对象的length属性可以读写;
jQuery框架中的$对象设计成类数组,其思想大概也是由此而来的吧。
原文:http://www.cnblogs.com/bobodeboke/p/5590430.html
内容总结
以上是互联网集市为您收集整理的javascript设计模式学习之二——this全部内容,希望文章能够帮你解决javascript设计模式学习之二——this所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。