javascript中的this

来源:未知 责任编辑:责任编辑 发表时间:2013-12-18 11:34 点击:

javascript里避免不了用到this,不过this的作用域scope问题常常会不经意间发送变化,导致程序出现错误或异常。
这里只对this做一些简单的总结,更详细的行为还需要大家去琢磨。
this都是用在函数function里的(废话...)。这里要说明一点,js里的函数就是一个普通函数(没有成员函数这一说法,准确的说),无论它定义在哪里。
所以一个函数可以绑定到任何对象上去用,这时成这个被绑定的对象为该函数的owner。ok,函数里的this就是指向他的owner的。
this的多变就是由于他的owner常常发生变化。举个例子:
< script type = "text/javascript" >
    var o = {
        _name : 'o' , // used for debug
        foo : function (){
            console . log ( this . _name );
        }
    }
   
    o . foo ();
</ script >


这里o.foo就是一个函数(应该叫函数指针,指向一个函数function(){console.log(this._name);})。那么执行 o.foo()的时候,foo(确切说是foo指向的函数)的owner就是o,里面的this也是o,运行结果会打印'o';
为什么说是函数指针?再继续这个例子:
< script type = "text/javascript" >
    var fn = o . foo ;
    fn ();
</ script >
      这里fn = o.foo并不是系统把o.foo这个函数copy给了fn,而是copy了o.foo的指针值,让fn也指向函数funtion(){console.log(this._name);}。
这时候执行fn什么效果呢?fn(again,确切说是fn指向的函数)“没了”owner,这时系统就会把window这个全局对象传给this,也就是说fn(不again了)的owner是window。
因为window里并没定义_name属性,这时会输出undefined。再测试一下,给window添加个熟悉_name;
        < script type = "text/javascript" >
            window . _name = 'window' ;
            fn ();
        </ script >
        OK,上面说了函数里的this到底指向的那个对象:执行时的owner。下面看看this为何会在实际应用中变化莫测。
根本原因很简单,他的owner变了,像上面的o.foo和fn两个例子就可以说明。以下举几个例子来说它经常的变化方式:
1. 对象里的函数(你知道这么说是不对的)调用了其他对象的函数,这时this就会变化
        < script type = "text/javascript" >
            // 例如常用的ajax
            var o2 = {
                xhr : null ,
                execute : function (){
                    xhr . onreadystatuschange = function (){

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Gb2312转utf-8编码的方法(vbs+js)
  • 如何使用Ajax技术开发Web应用程序(1)
  • js跳转路径问题
  • JavaScript模仿桌面窗口
  • 用js检测两个线段是否相交
  • 我知道的JavaScript -- 设计模式(桥接)应用之 – 验证器
  • 运用JavaScript构建你的第一个Metro式应用程序(on Windows
  • 我是如何去了解jquery的(六),案例之幻灯片轮换
  • Jquery封装幻灯片效果
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1