2011-05-04 45 views
0
function T() 
    { 
     var t = this; 
     function Hello() 
     { 
      alert(arguments.callee.caller == t);//false 
      alert(Hello.caller == t); //false 
      //this is a Object 
      //but caller just a Function. 
      //How? 
     } 

     Hello(); 
    }; 
    T(); 

// --------------------所以,我工作的代码:但我不喜欢“property(this)”。所以...我需要像调用Object.How编码?为什么javascript function.caller等于这个功能

function property(owner) 
{ 
    var that = this; 
    this.def = function (name, setFunction, getFunction) 
    { 
     Object.defineProperty(owner, name, { set: setFunction, get: getFunction }); 
     return that; 
    }; 
    this.propg = function (name, value) 
    { 
     Object.defineProperty(owner, name, 
     { 
      set: function (value) 
      { 
       ErrorLog(name + "并没有实现属性设置器。"); 
      } 
      , get: function() 
      { 
       return value; 
      } 
     }); 
     return that; 
    }; 
    this.prop = function (name, value) 
    { 
     var fieldValue = value; 
     Object.defineProperty(owner, name, 
     { 
      set: function (value) 
      { 
       fieldValue = value; 
      } 
      , get: function() 
      { 
       return fieldValue; 
      } 
     }); 
     return that; 
    }; 
    return that; 
} 

//#endregion 


using('Sofire.Data', function() 
{ 
    DataColumn = function (columnName, displayText) 
    { 
     var displayTextChanged = new EventObject(); 

     property(this) 
     .def('DisplayTextChanged' 
      , function (value) { displayTextChanged.Add(value); } 
      , function() { return displayTextChanged; }) 
     .propg('ColumnName', columnName) 
     .def('DisplayText' 
      , function (value) 
      { 
       displayText = value; 
       displayTextChanged.Raise(); 
      } 
      , function() { return displayText; }); 

    } 
}); 

回答

0

T是FunctionDeclaration,而t是被输入T的ExecutionContext中时产生的电流ActivationObject

您将需要使用arguments.callee.caller == T才能获得true

+0

哦,这就是为什么!但是,如何获得调用者实例?! – TreenewLyn 2011-05-04 07:42:22

+0

em,你刚刚做了 - 'this' - 那*就是*实例 – 2011-05-04 07:52:54