标签: module-pattern

Javascript:模块模式与构造函数/原型模式?

我想知道模块模式或Constructor/protoType模式是否更适用于我的工作.

基本上我使用的是不引人注目的javascript - HTML文档引用了.js文件.

我对模块模式的理解:

  • 调用INIT方法(基本上是一个我可以使用模块模式创建和返回的公共方法)
  • 在INIT方法中,分配所有点击事件等.

这听起来像是我情况的完美模式,因为我不需要创建对象和继承层次结构等.

我对构造函数/原型模式的理解:

  • 用于创建对象
  • 用于继承(即超类型的子类型)

我是否正确,为了提供不引人注目的javascript,模块模式是理想的?

javascript design-patterns unobtrusive-javascript module-pattern

73
推荐指数
2
解决办法
3万
查看次数

Ninject模块的目的是什么?

我是ninject的完全新手

我一直在拉开其他人的代码,发现了几个nInject模块实例 - 从Ninject.Modules.Module派生的类,并且有一个包含大部分代码的加载方法.

通过调用StandardKernel实例的LoadModule方法并将其传递给模块类的实例来调用这些类.

也许我在这里遗漏了一些明显的东西,但是这对于创建一个普通的旧类并调用它的方法,或者使用静态方法的静态类有什么好处呢?

 

c# dependency-injection module ninject module-pattern

58
推荐指数
2
解决办法
2万
查看次数

JavaScript设计模式:模块模式和揭示模块模式之间的区别?

我最近在阅读" 学习JavaScript设计模式 "一书.我没有得到的是模块模式和揭示模块模式之间的区别.我觉得他们是一回事.有谁可以举个例子?

javascript design-patterns module-pattern revealing-module-pattern

54
推荐指数
2
解决办法
1万
查看次数

严格违规使用此关键字并显示模块模式

无法获取以下内容以传递jslint/jshint

/*jshint strict: true */
var myModule = (function() {
    "use strict";

    var privVar = true,
        pubVar = false;

    function privFn() {
        return this.test; // -> Strict violation.
    }

    function pubFn() {
        this.test = 'public'; // -> Strict violation.
        privFn.call(this); // -> Strict violation.
    }

    return {
        pubVar: pubVar,
        pubFn: pubFn
    };

}());

myModule.pubFn();
Run Code Online (Sandbox Code Playgroud)

我理解它是由this函数声明中的使用引起的,但是我读过Crockford写的东西,他说违规是为了防止全局变量污染 - 但这里唯一的全局变量就是我明确定义的变量...... myModule.其他所有东西都保存在直接的功能范围内,我应该可以用它this来引用该模块.

任何想法如何让这种模式通过?

更新:如果我使用函数表达式而不是声明,这似乎工作,即

var pubFn = function () { ...
Run Code Online (Sandbox Code Playgroud)

我不是这种格式的粉丝,更喜欢将函数名称和命名参数更接近并且声明看起来/感觉更清晰.老实说,我不明白为什么这会引发违规行为 - 在这种模式中没有理由这样做.

javascript strict module-pattern

53
推荐指数
2
解决办法
2万
查看次数

这个代码构造包装库的各个部分是什么?它有用的是什么?

我模仿了一个库,并能够编写以下代码.此代码创建了分配功能的'c'对象'a'.所以,要打电话'a',我将不得不写c.a().

此外,我能够为此'c'对象添加更多功能.我想了解这段代码中发生了什么.它看起来不像普通的面向对象编程.这种类型的javascript编程叫什么?

var c = (function(c) {
    if (c === undefined) {
        c = {};
    }

    function a() {
        alert(1);
    }
    c.a = a;
    return c;
}(c));
Run Code Online (Sandbox Code Playgroud)

javascript module-pattern

39
推荐指数
4
解决办法
4061
查看次数

了解JS Module Pattern的工作原理

我正在尝试理解jQuery中使用的js模块模式.我已经编辑了几次,并试图在我的技能水平上做一个很好的练习(几个月新鲜的jquery).

这篇文章没有直接的问题.我更瞄准如何在大型网站中正确使用模块模式(与jquery一起)的反馈和输入.

更新:我添加了一些示例,以便全面了解所有编写内容的方法,并尝试覆盖任何陷阱.

/* 
Not all browsers works with console.log, so we want to make sure that
console.log is defined. This defines the consol.log and send the messages
into an alert.
*/
if(!window.console) console = {
  log: function(s) { 
    alert(s); // alert since we dont have the firebug console
  }
};

// Check if namespace is defined
if (typeof (CompanyName) === 'undefined') {
    CompanyName = {};
}

// Or if AppName under CompanyName...

if (typeof (CompanyName.AppName) === 'undefined') { …
Run Code Online (Sandbox Code Playgroud)

javascript jquery design-patterns namespaces module-pattern

24
推荐指数
1
解决办法
1万
查看次数

Javascript揭示模块模式,公共属性

我试图在javascript中绕过揭示模块模式.我对以下代码片段的两件事感到困惑.

        var Child = function () {
            var totalPoints = 100;
            addPoints = function (points) {
                totalPoints += points;
                return totalPoints;
            };
            getPoints = function () {
                return totalPoints;
            };
            return {
                points: totalPoints,
                addPoints: addPoints
            };
        };
        $(function () {
            var george = Child();
            console.log(george.points);
            console.log(george.addPoints(50));
            console.log(george.points);
        });
Run Code Online (Sandbox Code Playgroud)
  1. 这里写入控制台的三个值是100,150,100.这告诉我,当我用值调用"addPoints"时,totalPoints变量不会更新.如果我检查totalPoints的值的addPoints功能它已经被正确地递增.这是怎么回事?

  2. 如果我使用控制台检查window.addPoints或window.getPoints,我可以看到,因为我没有在函数声明前面使用"var"它们已被添加到全局范围.这不是错的吗?我正在看的大多数例子似乎都是这样做的.

任何指针都感激不尽.

javascript jquery design-patterns module-pattern

24
推荐指数
1
解决办法
8456
查看次数

将模块模式用于大型项目

我有兴趣使用模块模式来更好地组织我未来的项目.不幸的是,只有一些简短的教程和模块模式的概念验证示例.

使用模块模式,我想将项目组织成这种结构:

project.arm.object.method();
Run Code Online (Sandbox Code Playgroud)

其中"project"是我的全局项目名称,"arm"是项目的子部分或分支,"object"是单个对象,依此类推方法和属性.

但是,我不确定如何在"项目"下宣布和组织多个"武器"和"对象".

var project = window.project || {};
project.arm = project.arm || {};

project.arm.object = (function() {

    var privateVar = "Private contents.";

    function privateMethod() {
        alert(privateVar);
    }

    return {
        method: privateMethod
    };

}());
Run Code Online (Sandbox Code Playgroud)

定义复杂模块结构时是否有任何最佳实践或约定?我应该在最后一个下面声明一个新的手臂/物体吗?

javascript module-pattern

18
推荐指数
1
解决办法
5115
查看次数

JavaScript中这三个模块模式实现有什么区别?

我已经看到以下三个代码块作为JavaScript模块模式的示例.有什么区别,为什么我会选择一种模式而不是另一种?

模式1

function Person(firstName, lastName) {
    var firstName = firstName;
    var lastName = lastName;

    this.fullName = function () {
        return firstName + ' ' + lastName;
    };

    this.changeFirstName = function (name) {
        firstName = name;
    };
};

var jordan = new Person('Jordan', 'Parmer');
Run Code Online (Sandbox Code Playgroud)

模式2

function person (firstName, lastName) { 
    return {
        fullName: function () {
            return firstName + ' ' + lastName;
        },

        changeFirstName: function (name) {
            firstName = name;
        }
    };
};

var jordan = person('Jordan', 'Parmer');
Run Code Online (Sandbox Code Playgroud)

模式3

var …
Run Code Online (Sandbox Code Playgroud)

javascript module-pattern

15
推荐指数
1
解决办法
2224
查看次数

创建模块的多个实例

我以为我开始很好地理解JavaScript,但显然不是.让我用一个例子来解释我的问题.首先,我定义了以下模块:

var Test = function() {
    var counter = 0;

    function init() {
        alert(counter);
    }

    return {
        counter: counter,
        init: init
    }
};
Run Code Online (Sandbox Code Playgroud)

然后我创建了2个实例:

var test1 = new Test();
var test2 = new Test();
Run Code Online (Sandbox Code Playgroud)

现在我更新计数器变量(因为它是公共的)并做一些警报.到现在为止还挺好.

alert(test1.counter); // Alerts 0
test1.counter = 5;
alert(test2.counter); // Alerts 0
test2.counter = 10;
alert(test1.counter); // Alerts 5
Run Code Online (Sandbox Code Playgroud)

现在终于说出以下内容:

test1.init(); // Alerts 0
test2.init(); // Alerts 0
Run Code Online (Sandbox Code Playgroud)

这是我不明白的一点.为什么这个警报0?我认为第一个警报是5,第二个是10.

如果有人能解释上述内容如何起作用或指出我正确的方向,我将不胜感激.谢谢

javascript module-pattern revealing-module-pattern

15
推荐指数
2
解决办法
7009
查看次数