正确的语法可以通过原型化保留javascript上下文

正确的语法可以通过原型化保留javascript上下文,javascript,Javascript,因此,我知道我可以使用bind修复下面模块类的范围,如中所示 唯一的问题是,我对我的模块使用了稍微不同的语法,我不太确定如何应用它 那么,我的问题是,如何正确地将bind应用于我的函数,以便这个的上下文是我的模块 代码: 用法: var foo = module('nameValue'); foo.something(); 您可能希望先创建一个匿名函数,然后设置其他函数,然后使用对模块对象的自引用调用getName() var module = function () { var m

因此,我知道我可以使用
bind
修复下面模块类的范围,如中所示

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

那么,我的问题是,如何正确地将bind应用于我的函数,以便
这个
的上下文是我的模块

代码:

用法:

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

您可能希望先创建一个匿名函数,然后设置其他函数,然后使用对模块对象的自引用调用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();

下面是一个实例

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

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

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");
并在以后应用绑定

通过使用应用,您可以执行以下操作:

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

这完全取决于设置的结构



另外,用大写字母开头类名也是一种很好的做法(如在Modulevs.Module中)。

您认为myMod.prototype.something();是编写javascript的好方法吗?@KhanhTo您不需要
.prototype
部分调用时,这可能是上述代码中的一个意外(或未知)名称参数的使用是以整个模块的构造函数的形式出现的,您不支持-我会随使用情况而更新。
var getNameOfModule = function(){ return this.getName(); }
getNameOfModule.apply(mod1); // bar
getNameOfModule.apply(mod2); // foo
getNameOfModule.apply(mod3); // win