需要我自己的模块

Requiring My Own Modules

我正在为隔离 DOM 模式进行概念验证,并使用 Browserify 作为我的资产管道。结果我是 "requiring" 模块,因为我在代码中需要它们。请看这个非常简单的代码示例:

var loginForm = require('page-objects/loginForm');

lf = loginForm();

lf.signInButton.on('click', function(event){
    event.preventDefault();
    lf.email.val('TEST')
})

这是页面对象:

module.exports = LoginForm;

function LoginForm(){
    var $ = require('jQuery'),
    navbarForm = $('form.navbar-form');

    return {
        email: navbarForm.find('input[placeholder="Email"]'),
        password: navbarForm.find('input[placeholder="Password"]'),
        signInButton: navbarForm.find(':button')
    }
}

我不明白,也无法通过搜索找到 returns 为什么我需要实例化对象才能使用它们的答案。我在 Browserify GitHub 和手册中找到的示例并未将其显示为要求。但是,如果我在我的代码中没有 "new up" 这样的对象,则找不到该模块...我想知道为什么会这样。是否可以对我的代码进行更改以不必执行此操作?

没有对象实例化的代码:

var loginForm = require('page-objects/loginForm');

loginForm.signInButton.on('click', function(event){
    event.preventDefault();
    loginForm .email.val('TEST')
})

此刻,你导出一个函数,其中returns一个对象。要检索对象,您必须先执行导出的函数。如果您只想要对象而不先执行函数,只需导出对象而不是函数:

var $ = require('jQuery'),
var navbarForm = $('form.navbar-form');

module.exports = {
    email: navbarForm.find('input[placeholder="Email"]'),
    password: navbarForm.find('input[placeholder="Password"]'),
    signInButton: navbarForm.find(':button')
}