在模块之间传递对象引用
Passing object references between modules
我对javascript相当陌生,并试图学习一些最佳实践。 我不清楚为什么我无法访问以下代码中的 ctx 引用。 日志从 myApp.init() 输出一个 context2d 引用。 我可以不在 myApp 模块的返回语句中公开私有对象变量吗? 我以为我开始理解这种语言的基础知识,但对这个看似简单的概念感到沮丧。 感谢您的帮助。
window.onload = function () {
myApp.init();
console.log(myApp.ctx); // logs undefined
};
var myApp = (function () {
var canvas,
ctx,
init = function () {
canvas = document.getElementById("canvas");
ctx = canvas.getContext('2d');
console.log(ctx); // logs valid context2d object
};
return {
init : init,
ctx : ctx
};
}());
myApp.board = (function () {
var ctx = myApp.ctx;
return {
ctx : function () { console.log(ctx); } // logs undefined
};
}());
您需要调用init()
才能定义ctx
。然而,到那时,为时已晚,因为myApp包含ctx的原始值。
您对var ctx = myApp.ctx;
有完全相同的问题.这将在定义 board
时获取 ctx 的值。如果myApp.ctx
发生变化,它不会改变。
这应该有效:
var myApp = new function () {
var canvas;
this.init = function () {
canvas = document.getElementById("canvas");
this.ctx = canvas.getContext('2d');
console.log(this.ctx); // logs valid context2d object
};
};
myApp.board = new function () {
this.ctx = function () { console.log(myApp.ctx); }
};
通过使用 new
关键字,函数成为构造函数(并立即调用) - this
引用正在创建的对象。
相关文章:
- 如何使用object.assign()从其他对象引用基本对象属性
- 返回 JavaScript 类值而不是对象引用
- Facebook:当发布期望对象引用时显示打开的图形对话框
- Javascript-如何从字符串/对象引用回调
- 将其用于对象引用
- 如何将对象引用传递到 mootools 中另一个对象的构造函数中
- Javascript:将类/对象引用设置为 NULL,内存中的子对象/类会发生什么
- 在 Jquery 中,我可以存储对象引用并在以后使用它吗?
- 将对象函数传递给请求动画帧时丢失对象引用
- JavaScript ecma6中的对象引用
- 在JSON中存储对象引用
- 为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问
- 对象引用的隐式传递是如何工作的
- 按对象的 ID 删除对选定对象的对象引用
- 在调用的函数中使用对象引用(this)
- 如何在testcomplete+js中获取对象引用
- 在Angularjs服务中为返回对象引用的http请求提供的数据构建简单的缓存
- JavaScript对象引用
- 对象引用未设置为行中的对象的实例,如果 (!string.IsNullOrEmpty(tdcd.文本)&&
- 在模块之间传递对象引用