本帖最后由 xjhjzxh 于 2015-02-11 13:03:02 编辑

解决方案 »

  1.   

    this 的值是可以被程序改的
    function a(){alert(this)}
    a.call('a');
    a.call(1);
    a.call(window)
      

  2.   

    1) $("#btn").bind('click', animal.dog.barking);,这样绑定事件,barking里面的this指向btn这个对象,并不是dog,改成下面这样$("#btn").bind('click', function(){animal.dog.barking()});其他不难理解。。
      

  3.   

    $("#btn").bind('click', animal.dog.barking);  
    这里等同于   $("#btn").onclick=animal.dog.barking
    而你想要的效果是  $('#btn').onclifk=function(){animal.dog.barking()};一个是给click事件添加引用,也就是说,拷贝一份给到click,所以animal.dog.barking执行的时候,this指向的是 执行的  btn 对象
    而第二个 是 在click事件的时候执行animal.dog.barking() 这个函数,这个函数的执行域不是  btn ,所以 this 不是执行btn 对象例如:
    <input type="button" value="a"  id="btn" onclick="console.log(this.value)"  />
    <input type="button" value="ab"  id="btn2" />
    <script type="text/javascript">
    var value="abc";
    function test()
    {
    console.log(this.value)
    }
    var btn=document.getElementById('btn');
    var btn2=document.getElementById('btn2');
    btn.onclick=test;     //输出  a
    btn2.onclick=function()    //输出  abc
    {
    test();
    }
    </script>
      

  4.   

    *楼上代码有点问题
    $("#btn").bind('click', animal.dog.barking);  
    这里等同于   $("#btn").onclick=animal.dog.barking
    而你想要的效果是  $('#btn').onclifk=function(){animal.dog.barking()};一个是给click事件添加引用,也就是说,拷贝一份给到click,所以animal.dog.barking执行的时候,this指向的是 执行的  btn 对象
    而第二个 是 在click事件的时候执行animal.dog.barking() 这个函数,这个函数的执行域不是  btn ,所以 this 不是执行btn 对象例如:
    <input type="button" value="a"  id="btn"  />
    <input type="button" value="ab"  id="btn2" />
    <script type="text/javascript">
    var value="abc";
    function test()
    {
    console.log(this.value)
    }
    var btn=document.getElementById('btn');
    var btn2=document.getElementById('btn2');
    btn.onclick=test;     //输出  a
    btn2.onclick=function()    //输出  abc
    {
    test();
    }
    </script>