我正在制作一个javascript/canvas游戏,我在CSS Tricks上看到了这个例子。这里是链接
无论如何,我想知道,因为我正在重构我的游戏代码,并创建我自己的对象,到目前为止,这看起来是一个很好的模式。
对我来说,这看起来就像我在上读到的模块模式
我说的对吗?
/* NOTE: this is just a snippet from the example, go to the link to see the
finished example */
var JS_SNAKE = {};
JS_SNAKE.game = (function () {
var ctx;
J
我通过这个链接来理解Javascript中的设计模式我理解了构造器模式,模块模式和模块揭示模式,现在在单例模式中我有两个疑问:
1)我知道c++,我现在正在学习JavaScript,所以我知道单例模式只允许类的一个实例,但本书中提到“在JavaScript中,单例作为共享的资源命名空间,它将实现代码与全局命名空间隔离开来,以便为函数提供单一访问点。”这是什么意思?
2)
var mySingleton = (function () {
// Instance stores a reference to the Singleton
var instance;
function init()
我想在底层存储中存储私有变量,但我不想对它们进行编码。例如,我有这样一个结构,我想在其中存储私有变量。
pub struct TestStruct {
// Some public variables
// Could there be a private variable?
test_private: u64,
}
我知道,根据区块链中的想法,所有东西都应该是公开的,并且最有可能需要对变量进行加密。我听说过“揭示模式”,它在这种情况下有帮助吗?
假设我的代码修改了一个不向用户公开的变量,如下所示:
var model;
module.exports = {
doSomething: function() {
...
//at some point in the code, modify model
if(/* something happened */) {
model = '123';
},
doSomethingElse: function() {
//use model in some way
}
}
};
如果稍后我想要编写单元测
我已经用vanilla javascript和jquery做了相当多的工作。我现在正在尝试编写一个应用程序,它使用某种形式的闭包来私有化方法,这样所有东西都不会只在公共名称空间中出现。
我转向了Module模式,因为它似乎是我的问题的解决方案,但是我不能完全理解它。当您使用此模式将方法添加到主应用程序中时,所有模块是否也可以使用其他模块中的所有方法?因为,看起来情况并非如此。
var MODULE = (function () {
var my = {},
privateVariable = 1;
function privateMethod() {
有没有从类/模块本身外部调用“私有”方法的(非平凡的/丑陋的)方法?
请不要问我为什么需要这个。
只是我个人的好奇心和对在JS中做任何事情的能力的信任:)
function Module () {
var privateMethod = function () {
alert('1');
};
var publicMethod = function () {
privateMethod();
alert(2);
};
return {
pm: publicMethod
};
}
var m = new Module
我正在研究,并注意到一种模式,其中函数的定义如下:
var foo = ( function () {
var bar = new Bar();
return function ( ) {
//actual logic using bar from above.
//return result;
};
}());
(例如,请参阅raycast方法)。
这种方法的正常变化如下:
var foo = function () {
var bar = new Bar();
//actual logic.
//retur
我想从私有方法调用公共方法,但属性"this“指的是window对象。
请注意,我正在尝试应用模块模式。您可以在上找到一个有效的代码示例
// how can i access a public method from a private one?
// (in this example publicAlert from privateMethod)
// this refers to the window object.
$(function() {
var modulePattern = (function($)
{
var privateMethod = functio
主要问题是如何测试在主函数中定义的私有函数?有没有任何方法来测试结构中的函数(测试在主函数中定义的函数)?
Main.js:
function main (var1) {
var a;
//some variables
configure(getConfig());
function getConfig() {
var config = {//some object...
};
return config;
}
function configure(config) {
//do somethings;
}
function g
我发现自己很少使用OOP,我的意思是这样
function Person(name){
return this.name = name;
}
Person.prototype.dateOfBirth = function(){
//some stuff here
}
var John = new Person('John');
console.log(John.dateOfBirth);
也许我不是在构建框架或其他什么,但有时我喜欢使用对象文字对我的方法进行分组,例如
var John = {
name:'John',
dateOfB
下面的两个方法在的顶级作用域中。但是,它们只在Backbone.Events中使用。
为什么不像其他方法那样,将它们作为属性包含在传递给Backbone.Events的对象文字中?
这是为了让它们保持私有,而不是用户API吗?
// only used in Backbone.Events
eventsApi = function(obj, action, name, rest) {
// internals
};
// only used in Backbone.Events
triggerEvents = function(events, args) {
// intern
我想从一个全局函数调用一个局部函数,但我得到了foo is not defined错误。怎样做才是正确和安全的,因为我可能会发送一个json对象。
(function() {
function foo(js) {
// codes ....
console.log(js);
}
})();
function bar(result, validation) {
if (validation) {
// just call the function
foo(result);
}
}
上面的方法意味着从获取一个值。
弹出窗口中按钮的onclick事
我正在尝试理解如何在下面的脚本中接触/更改/递增我的私有作用域变量x。我在这里使用的是Module模式,我想我可以从公共返回模块声明的属性或方法中访问并设置私有变量,但我尝试的任何东西都不起作用。相关:什么时候声明func的新实例,而不是访问func作为静态delcared变量?
var func = (function() {
var x = 1;
var squareX = function() {
return x * x;
};
var addOne = function() {
x++;