0

所以我知道我可以在下面使用这个答案来修复我的模块类bind范围

唯一的问题是我为我的模块使用了稍微不同的语法,我不太确定如何应用它?

那么我的问题是,如何正确地将绑定应用到我的函数,以便上下文this是我的模块?

代码:

var module = (function () {

    var module = function (name) {

        this.getName= function() {
            return name;
        }

    };

    module.prototype = {

        something: function () {
            // my function needs to access getName from here...
        }
    };

    return module;
})();

用法:

var foo = module('nameValue');
foo.something();
4

2 回答 2

0

您确定在这种情况下使用apply而不是bind不是更好的实现吗?

如果您只想在模块化设置中使类属性可供访问,则需要在类函数声明中公开它们。然后,它们将可供使用这些方法的公共访问。

var module = (function () {

    function module (name) {

        // public method exposing *name* variable with "privileged" access
        this.getName= function() {
            return name;
        }

        // publicly exposing *name* variable itself (ahh! It's naked!)
        // this.name = name; // use only for read+write access to variable

    };

    // only setting one prototype parameter here so let's save some lines...
    module.prototype.something =  function () {

            return this.getName(); // or
            // return this.name // for direct variable exposure

    };

    return module;
})();

然后你可以创建你的实例:

var mod1 = new module("bar");
var mod2 = new module("foo");
var mod3 = new module("win");

稍后应用绑定...

虽然通过使用apply,您可以这样做:

var getNameOfModule = function(){ return this.getName(); }
getNameOfModule.apply(mod1); // bar
getNameOfModule.apply(mod2); // foo
getNameOfModule.apply(mod3); // win


这将完全取决于您的设置结构。


此外,最好以大写开头的类名(如Module vs. module)。

于 2013-04-15T03:57:01.850 回答
-1

您可能希望首先创建一个匿名函数,然后设置其他函数,然后使用对模块对象的自引用调用 getName()。

var module = function () {

    var module = function(){};

    module.getName = function (name) {
        return name;
    };

    var self = module;

    module.prototype.something = function () {
        alert(self.getName('myName'));
    };

    return module;
};

var myMod = module();
myMod.prototype.something();

这是现场示例http://jsfiddle.net/ybfjB/

于 2013-04-15T02:44:29.800 回答