为require.js声明JavaScript原型

时间:2014-06-12 17:56:52

标签: javascript requirejs js-amd

我对JavaScript OOP和require.js

都很陌生

我正在学习使用require.js来提高应用程序的可伸缩性,我试图谷歌搜索文章,但由于我的JavaScript背景不佳而没有真正理解。

我想出了这个编码。

employee.js

define([], function() {
      function Employee(empName) {
         return {
            _empName: empName,
             getEmployeeName: function() {
                return _empName;
             }
         }
     }
});

customer.js

define([], function() {
    function Customer(customerName) {
        this._customerName = customerName;

        this.getCustomerName = function() {
            return this._customerName;
        }
    }

    return(Customer);
});

我为Employee和Customer原型尝试了两种不同的编码风格。

main.js

require(['customer', 'employee'], function(Customer, Employee) {
    c = new Customer('Boy');
    console.log('Customer name is ' + c.getCustomerName());

    e = new Employee('Mike');
    console.log('Employee name is ' + e.getEmployeeName());
});

这是我得到的结果。

enter image description here

我的问题是,在customer.js中进行编码只能来声明原型以便与require.js一起使用?

我的理解是,require.js总是只会将依赖关系注入(非实例)吗?

通过回答这两个简单的问题来帮助我进入下一步的学习,任何建议的文章都会非常感激,(我真的不知道要搜索哪些特定主题)。

由于

1 个答案:

答案 0 :(得分:1)

  

我的问题是,在customer.js中编码只是声明使用require.js原型的方法吗?

没有。使用原型与使用require.js无关。

  

我的理解是,require.js始终只将依赖关系注入类(非实例)吗?

没有。它会从模块定义中注入您返回的任何内容。在employee.js的情况下,这不算什么;并且Employee最终成为undefined


请修改您的员工代码:

define([], function() {
    function makeEmployee(empName) { // it's not a constructor - don't capitalize
                                     // it shouldn't be invoked with `new` either
        return {
            _empName: empName,
            getEmployeeName: function() {
                return this._empName; // it's a property, not a variable
            }
        }
    }
    return makeEmployee; // return the function to become the module!
});