js-----关于this
来源:互联网 发布:bp算法和bp神经网络 编辑:程序博客网 时间:2024/05/22 05:15
function 这个东西我觉得是js最。。。。。的地方
基础的东西xujiaxuliang有个帖子说的很不错了 就不再费事啰嗦了 http://topic.csdn.net/u/20090217/13/653f7949-9e0c-4e99-adb3-dcbc99fca8d5.html?52639(讲的很不错 初学的话很应该看一下 可惜我当年没看到。。。。)
-----先讲this
特别说一下this的一个语言设计错误 这个要小心了 说不定什么时候this就出乎意料的绑到全局去了
最开始发现这个问题是给页面上一个组件加事件 虽然用的EXT但是js的本质。。。后果很严重啊 (因为我是学了一周的js就拿它干活了 理论还不很扎实 所以得靠工作中一点点犯错误来学习了。。。。
Douglas Crockford大师把this古怪的行为解释为和函数的调用模式有关
js中有四种调用模式---方法、函数、构造器以及apply调用模式,它们在初始化this时候是不一样的
方法模式 简单的说就是使用点表达式或是下标表达式来调用 这里定然是有对象的 这种情况下 this的绑定发生在调用的时候 绑的自然是调它的那个对象了
函数模式 这个就更简单了 函数名加调用运算符('()') 不过要小心 这个this绑的可是全局对象 不管你写哪了。。。
(可以理解成 你不给我指明了 我就自己给它加个全局对象。。。。。)
看个例子吧
var value=3; //这个是个全局变量
var obj = {
value : 1,
getValue : function (){
return this.value;
}
}
obj.double=function (){
dd = function () {
this.value=this.value*2; //这里的this已经绑定到全局对象了
alert(this.value);// 6
}
dd();
alert(this.value); //1
}
obj.double();
alert(obj.getValue()); //1
/*+++++++++++++++++++++++解决这个问题的方法++++++++++++++++++++++++++++++++++*/
var value=3;
var obj = function (){
this.value = 1;
this.getValue = function (){
return this.value;
};
this.double=function (){
var that = this; //这里的是引用 (关于引用还是复制 我会单独讲讲。。。)
function dd () {
that.value=that.value*2;
alert(this.value); //3
}
dd();
alert(this.value); //2
}
}
var t = new obj();
t.double();
alert(t.getValue()); //2
构造器调用模式 一句话就是用new来调用的 new的时候this就绑定到新对象上了 比较好理解
apply调用模式 apply是函数的一个方法吧 你想把谁绑定到this 就直接把它作为第一个参数传给apply就好了
比较不好理解的就是函数调用模式了 用惯了块级作用域自然是不好接受这种行为 先接受js没有块级作用域这个事实就好理解js很多很古怪的行为了(我是从c系转过来的 当年c系没学好 一定程度上为我学js扫除了些障碍== 认识它之后就不想回头了。。。。。
- js-----关于this
- 关于js 中的 this
- js--关于this
- js关于this对象
- 关于js的this
- 关于JS中的this
- 关于 js THIS
- 关于Js的this问题
- js 关于函数与this
- 关于JS中的this记录
- js 关于this的一些语法问题
- 关于js this 的一个难点
- {{JS}}关于this一个不解的地方
- 关于js类中闭包调用this问题
- 关于JS 函数this的用法
- 关于js中函数里的this
- 关于js中this的用法详解
- JS关于this的思考和总结
- Service Unavailable——开发时搞死了moss
- 关于硬件设备的PCI总线 位置 功能的说明
- 代理模式、动态代理和面向方面
- 周鸿祎:免费用户虽不掏钱 却是商业模式基础
- Using JDBC with MySQL, Getting Started
- js-----关于this
- Change your bad habit ,To be more Effective!
- 关于BCP工具的使用,介绍三个方面的东西
- MD5 java 加密算法
- 都是大雾惹得祸
- 都是大雾惹得祸
- linux中mount共享smbfs
- Oracle存储过程分页
- 如何将一个Jsp网站打包发布(发布为War文件)