正确的语法可以通过原型化保留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