Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么javascript Function.caller nequal要执行此操作_Javascript - Fatal编程技术网

为什么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; });

    }
});