function a(f){
    f()
}function b(){
    this.c = "c"
var o = this;
    a(function(){ alert(o.c) })
}b()这是我一般的方法

解决方案 »

  1.   

    一般的做法和lz一样var _this = this;然后传递_this
    其实这题根本不需要这么做
    从头到尾this都是同一个值,它指向那个全局对象see: function a(f){
        f()
    }function b(){
        this.c = "c"
        var o = this;
        a(function(){ alert(o.c) })
    }b();alert(c);//同样显示 "c"
      

  2.   

    this,
    是内部值, 可以配合new 使用
    function ma(a,b)
    {
    this.a=a;
    this.b=b;
    this.s=a+b;
    this.p=a*b;
    }var v1=new ma(1,2);
    alert(v1.a);
    alert(v1.b);
    alert(v1.c);
    alert(v1.d);类式用法.this.sum=function(a,b,c){ ...}....
      

  3.   

    function a(f,o){
        f.call(o)
    }//沒有必要寫一個call的調用函數吧?call已經很簡單就可以調用了!function b(){
        this.c = "c"
        a(function(){ alert(this.c) }, this)
    }b()你完全可以這樣:function b(){
        this.c = "c";
        (function(){alert(this.c)}).call(this);
    }b();
      

  4.   

    再看了下你的題意,是不是這樣?<script type="text/javascript">
    function a(){
        alert(this.c);
    }function b(){
        this.c = "c"
        this.a = a;
        this.a();
    }b();
    </script>
      

  5.   

    那这样还不如写到prototype中呢但a因为是公用函数
    而且已经在用的
    所以不能破环a()这样执行的结构
    不然就原来的都要改了(可以看到我那个o没有的话也能正常执行)可以说那个f跟a是没有什么关系的只是传递过去在在程序中执行而已
    其实2楼那个也符合要求的了
    只是想有没有更好(看)的方法
      

  6.   

    this不传的话,默认指向上一级域,所以
    function a(f){
      f()
    }function b(){
        this.c = "c"
        a(function(){alert(this.c)})
    }b()
    也是可以的吧,当然也是不严谨的。
      

  7.   

    function a(f,o){
        f.call(o)
    }function b(){
        var c = "c"
        a(function(){ alert(c) }, b)
    }b()
    不用this,这样也行啊
      

  8.   

    cloud好久不见,单位不能上qq郁闷阿,只能看你的贴子了