如何从函数本身或其副本访问属性 Javascript
How to access properties from the function itself or its copies in Javascript
从被调用的函数对象中访问函数的某些属性或其副本的最佳方法是什么?示例代码:
"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
不是选项,因为它似乎会被弃用。
What is the best way to access certain properties of a function or its copies from within the function object being called?
这不可能。 .bind
创建一个新函数,它只调用原始函数 (func
)。即使您使用 arguments.callee
,它也会引用 func
.
忽略原始函数的派生,您可以使用命名函数表达式:
var func = function someName(){
alert(someName.prop);
};
func.prop = 1;
func();
someName
仅在函数内部可用。
是不是太复杂了?也许只是这样做:
var func = function(*thisFuncObject*){
alert(*thisFuncObject*.prop);
};
func2({ prop: 2});
最后我想到了这个解决方案:
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() 方法添加到其 return,以便使用 copy.clone()
制作副本?没那么明显...
从被调用的函数对象中访问函数的某些属性或其副本的最佳方法是什么?示例代码:
"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
不是选项,因为它似乎会被弃用。
What is the best way to access certain properties of a function or its copies from within the function object being called?
这不可能。 .bind
创建一个新函数,它只调用原始函数 (func
)。即使您使用 arguments.callee
,它也会引用 func
.
忽略原始函数的派生,您可以使用命名函数表达式:
var func = function someName(){
alert(someName.prop);
};
func.prop = 1;
func();
someName
仅在函数内部可用。
是不是太复杂了?也许只是这样做:
var func = function(*thisFuncObject*){
alert(*thisFuncObject*.prop);
};
func2({ prop: 2});
最后我想到了这个解决方案:
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() 方法添加到其 return,以便使用 copy.clone()
制作副本?没那么明显...