如何在 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
不是选项,因为它似乎将被弃用。
从被调用的函数对象中访问函数的某些属性或其副本的最佳方法是什么?
那是不可能的。 .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});
相关文章:
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 全局变量和全局对象的属性之间有什么区别吗
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 序列化数据属性中对象的最可靠方法
- 分析高度属性时出现意外值{{specs.height}}.index.html
- TypeError:无法读取属性'推'未定义的JavaScript
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- AngularJS-使用'true'属性
- 可以't使用JavaScript获取width属性
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- JavaScript Pub/Sub属性访问问题
- 从JavaScript访问struts操作中的属性
- 是否可以从父类访问子类的属性
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何在选项卡上定义属性'的主窗口对象
- 如何在 Javascript 中从函数本身或其副本访问属性
- 如何防止jQuery扩展深度副本复制我的一些自定义属性
- 创建任何对象(包括深层属性)的只读/不可变副本