从被调用的函数对象中访问函数或其副本的某些属性的最佳方法是什么?示例代码:
"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
不是选项,因为它似乎已被弃用。
答案 0 :(得分:1)
从被调用的函数对象中访问函数或其副本的某些属性的最佳方法是什么?
那是不可能的。 .bind
创建一个新函数,只调用原始函数(func
)。即使您使用arguments.callee
,也会引用func
。
忽略原始函数的派生,可以使用命名函数表达式:
var func = function someName(){
alert(someName.prop);
};
func.prop = 1;
func();
someName
只能在函数内部使用。
答案 1 :(得分:0)
最后,我提出了这个解决方案:
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()
复制副本?这不是那么明显......
答案 2 :(得分:-1)
难道太复杂了吗?也许只是这样做:
var func = function(*thisFuncObject*){
alert(*thisFuncObject*.prop);
};
func2({ prop: 2});