作为对象的函数,应用方法javascript

时间:2017-03-29 18:50:19

标签: javascript function object module apply

我正在学习javascript函数作为对象,但我正在努力解决这个与闭包和模块有关的特定示例。

var MyModules = (function Manager() 
    {
    var modules = {};
    function define(name, deps, impl) {
      for (var i=0; i<deps.length; i++) {
      deps[i] = modules[deps[i]];
    }
    modules[name] = impl.apply( impl, deps );
    }
    function get(name) {
        return modules[name];
    }
    return {
       define: define,
       get: get
    };
})();
MyModules.define( "bar", [], function(){
    function hello(who) {
        return "Let me introduce: " + who;
    }
    return {
        hello: hello
    };
} );
MyModules.define( "foo", ["bar"], function(bar){
    var hungry = "hippo";
    function awesome() {
        console.log( bar.hello( hungry ).toUpperCase() ); 
    }
    return {
        awesome: awesome
    };
} ) 
var bar = MyModules.get( "bar" );
var foo = MyModules.get( "foo" );
console.log(bar.hello( "hippo" )); // Let me introduce: hippo
foo.awesome(); // LET ME INTRODUCE: HIPPO

现在,据我所知,MyModules是一个对象,属性为“define”,“get”为函数。 Module是一个对象,其属性在define函数的“name”参数中指定,该函数是一个字符串,deps是一个参数数组,impl是一个函数。我对吗?

我不明白的是
modules[name] = impl.apply( impl, deps );

一部分。 apply方法有什么作用?我知道第二个参数,但调用方法的函数(object ??)的作用是什么,在apply方法中作为参数接受的函数的作用,函数的返回值以及它是如何实现的与上述相关? 文档说: 语法

fun.apply(thisArg,[argsArray]) 参数

thisArg 这个值为乐趣召唤提供了。请注意,这可能不是方法看到的实际值:如果方法是非严格模式代码中的函数,则null和undefined将替换为全局对象,并且原始值将被装箱。

argsArray 一个类数组的对象,指定应该调用fun的参数,如果不应该为函数提供参数,则为null或undefined。从ECMAScript 5开始,这些参数可以是类似通用数组的对象而不是数组。有关浏览器兼容性信息,请参阅下文。

返回值

使用指定的this和arguments调用函数的结果。

我编写了整个代码,因为我不知道我是否理解它,并且不想提供错误的信息。

0 个答案:

没有答案