为什么javascript Function.caller nequal要执行此操作
//----------所以,我工作代码:但我不喜欢这个属性。所以…我需要像调用者一样的对象。如何编码为什么javascript Function.caller nequal要执行此操作,javascript,Javascript,//----------所以,我工作代码:但我不喜欢这个属性。所以…我需要像调用者一样的对象。如何编码 function T() { var t = this; function Hello() { alert(arguments.callee.caller == t);//false alert(Hello.caller == t); //false //
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();
T是FunctionDeclaration,而T是输入T的ExecutionContext时生成的当前ActivationObject
您需要使用arguments.callee.caller==T才能得到true。噢,这就是为什么!但是,如何获得调用方实例?!嗯,你刚刚做了-这-这就是例子
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; });
}
});