如何在 Javascript 中从函数本身或其副本访问属性

How to access properties from the function itself or its copies in Javascript

本文关键字:副本 属性 访问 函数 Javascript      更新时间:2023-09-26

从被调用的函数对象中访问函数的某些属性或其副本的最佳方法是什么?示例代码:

"use strict";
var func=function(){
    // need to access certain properties of itself or its future copies:
    alert(*thisFuncObject*.prop); // *thisFuncObject* is the missing reference to the function object being called
};
func.prop=1;
var func2=func.bind({}); // copy func
func2.prop=2; // assign new prop
func2(); // I need it to alert 2

arguments.callee不是选项,因为它似乎将被弃用。

从被调用的函数对象中访问函数的某些属性或其副本的最佳方法是什么?

那是不可能的。 .bind创建一个新函数,该函数仅调用原始函数(func)。即使你使用arguments.callee,它也是指func


不考虑原始函数的派生,您可以使用命名函数表达式:

var func = function someName(){
    alert(someName.prop);
};
func.prop = 1;
func();

someName仅在函数本身内部可用。

最后,

我想出了这个解决方案:

var original=function(){
    alert((this||original).prop);
};
original.prop=0;
original.clone=function(){
    return function func(){
        return (this||original).apply(func, arguments);
    };
};
var copy=original.clone();
copy.prop=1;
var copy2=original.clone();
copy2.prop=2;
original(); // alerts 0
copy(); // alerts 1
copy2(); // alerts 2

顺便说一句,谁知道如何将 clone() 方法添加到其返回中,以便使用 copy.clone() 制作副本的副本?这不是那么明显...

是不是太复杂了?也许只是这样做:

var func = function(*thisFuncObject*){
    alert(*thisFuncObject*.prop);
};
func2({ prop: 2});