克隆原型功能保持范围
Clone prototype function keeping scope
我有一个有点奇怪的用例,但在这里(下面是一个例子,但方法的命名有些不同);
在我使用的对象上有一个原型函数名称bootstrap
,它调用函数create
。我想修改它(不改变原型),以便调用createCustom
。要做到这一点,我正在toString()
原型函数,在create
-> createCustom
上做字符串替换,然后eval
将其返回到函数。
问题是bootstrap
函数在它内部有几个对this
的引用,并且似乎我的克隆函数不再具有相同的作用域(预期的那种)。
任何想法,如果我可以绑定一个特定的上下文,让它回到它应该是在克隆方法?不幸的是,到目前为止,我所尝试的一切都没有奏效。
我意识到得到我上面想要的东西的方法是混乱的,但是我无能为力。提前感谢!
一旦你有了你的eval
'd函数,你可以通过Function#call
或Function#apply
使用任何this
值来调用它:
// Call f with `this` referring to `obj`, arguments 1, 2, and 3
f.call(obj, 1, 2, 3);
// Same thing, note how the arguments are passed as an array
f.apply(obj, [1, 2, 3]);
生活例子:
function Foo(name) {
this.name = name;
}
Foo.prototype.bootstrap = function() {
create(this.name);
};
var obj = new Foo("The object");
// Not that I recommend doing this!
var f = eval("(" + obj.bootstrap.toString().replace(/'bcreate'b/g, "createCustom") + ")");
snippet.log("b");
snippet.log("Executing: obj.bootstrap()");
obj.bootstrap();
snippet.log("Executing: f.call(obj)");
f.call(obj);
function create(n) {
snippet.log("create called with '" + n + "'");
}
function createCustom(n) {
snippet.log("createCustom called with '" + n + "'");
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
相关文章:
- 访问内部功能范围的元素,而不是敲除中的外部
- 谷歌Chrome在范围滑块禁用时卡住了's的更改功能
- 功能范围外的图像参考问题
- Angular:控制器范围内的可重用功能
- JS全局/功能范围理解
- 为什么在使用箭头键时,打开更改功能不适用于我的范围滑块
- 创建可在任何地方使用的 JS 函数?范围和功能“未定义”的问题
- 视图模型中的功能范围
- 创建高图表点击功能时丢失了 Angularjs 范围
- 当输入[范围]值更改/拇指拖动时触发功能
- 创建范围功能在除IE以外的其他浏览器中不起作用
- 角度链接功能:$Scope与范围
- 在全球范围内公开wep应用程序功能-是或否
- 未捕获范围错误:超出最大调用堆栈大小(执行背景颜色切换器功能时)
- angularjs,范围不跨功能更新-使用ngTouch
- 功能范围&进入/离开所述函数的变量
- 将一个实体的功能分配给另一个实体的功能时,范围不会更改
- 过滤器编号范围功能问题
- 谷歌地图地理编码功能-范围
- 使用moment.js、js或Jquery,在一个时间范围内打开一个功能