如何更改对先前作用域中的对象的引用的函数
How to change a function that has references to objects in a previous scope
我想替换函数的代码,但它在另一个范围内有引用。我不确定我是否使用了正确的术语,因此代码可以更好地解释这一点。
RenderEngineWebGL = (function () {
//code that creates textCanvas somewhere here
re.createTextTexture = function(textureId, fontName,
size, color, text, outlineSize, outlineColor) {
...
...
var ctx = textCanvas.getContext('2d');
ctx.save();
ctx.font = fontString;
ctx.textBaseline = 'top';
}
...
return re;
}());
我试图通过将RenderEngineWebGL.createTextTexture更改为我希望函数的工作方式来编辑它。
RenderEngineWebGL.createTextTexture = function(textureId, fontName,
size, color, text, outlineSize, outlineColor) {
...
...
console.log(text);//Whatever I Want
size = 50; //to change here
var ctx = textCanvas.getContext('2d');
ctx.save();
ctx.font = fontString;
ctx.textBaseline = 'top';
}
这不起作用,因为 textCanvas 不是在该范围之外定义的。我通过使用 chrome 扩展程序并用我的代码替换整个代码暂时解决了这个问题,但是当代码更新时,我必须手动将这些编辑放回去。
textCanvas 不是唯一的问题,因此找到该 canvas 将无济于事。还有其他导致错误的参考资料,我没有包括在内。
如果我能够编辑此函数而不必替换脚本其余部分中的所有代码,那么我唯一需要更新它的时间是当我更改的部分已更改时。
如何更改引用 textCanvas 等对象的函数?
您不能在匿名函数之外访问 textCanvas,因为它在词法上绑定到该函数范围。您唯一的选择是更改RenderEngineWebGL
,以便其他范围可以访问textCanvas
。例如,您可以在RenderEngineWebGL
中执行此操作:
re.textCanvas = textCanvas;
然后你可以通过使用 RenderEngineWebGL.textCanvas
在函数之外获取它。
更好的方法是创建一个公共"方法"来获取私有变量:
re.getTextCanvas = function() {
return textCanvas;
};
相关文章:
- 如何使用object.assign()从其他对象引用基本对象属性
- 返回 JavaScript 类值而不是对象引用
- Facebook:当发布期望对象引用时显示打开的图形对话框
- Javascript-如何从字符串/对象引用回调
- 将其用于对象引用
- 如何将对象引用传递到 mootools 中另一个对象的构造函数中
- Javascript:将类/对象引用设置为 NULL,内存中的子对象/类会发生什么
- 在 Jquery 中,我可以存储对象引用并在以后使用它吗?
- 将对象函数传递给请求动画帧时丢失对象引用
- JavaScript ecma6中的对象引用
- 在JSON中存储对象引用
- 为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问
- 对象引用的隐式传递是如何工作的
- 按对象的 ID 删除对选定对象的对象引用
- 在调用的函数中使用对象引用(this)
- 如何在testcomplete+js中获取对象引用
- 在Angularjs服务中为返回对象引用的http请求提供的数据构建简单的缓存
- JavaScript对象引用
- 对象引用未设置为行中的对象的实例,如果 (!string.IsNullOrEmpty(tdcd.文本)&&
- 如何在使用声明式 Dojo 时获取对象引用