Javascript 对象文字和';这';在子模块模式中
我在一个子模块模式代码中工作。如果要创建具有对象文字的子模块,问题是子模块中的对象是模块而不是我的对象文字。有什么想法吗Javascript 对象文字和';这';在子模块模式中,javascript,module-pattern,Javascript,Module Pattern,我在一个子模块模式代码中工作。如果要创建具有对象文字的子模块,问题是子模块中的对象是模块而不是我的对象文字。有什么想法吗 var MODULE.sub = (function () { var myObject = { key: value, method: function () { this.key // this = MODULE and not MyObject... :( } }; return
var MODULE.sub = (function () {
var myObject = {
key: value,
method: function () {
this.key // this = MODULE and not MyObject... :(
}
};
return myObject.method;
}(MODULE));
这对我很有用:
var MODULE = MODULE || {};
MODULE.sub = (function () {
return {
myObject : {
key : 10,
method : function() {
console.log(this.key);
}
}
};
})();
那就叫它:
MODULE.sub.myObject.method();
您只是返回方法,而不是键,因此“this”将是未定义的。如果您想这样做,可以将其保持为私有,并将密钥作为var传入:
var MODULE = MODULE || {};
MODULE.sub = (function () {
var key = 10,
return {
myObject : {
method : function() {
console.log(key);
}
}
};
})();
解决了。。。只需返回MODULE.sub中调用public方法的函数。我不知道这是不是最好的办法
var MODULE.sub = (function () {
var myObject = {
key: value,
method: function () {
this.key // this = myObject :)
}
};
return function () {
myObject.method();
}
}(MODULE));
s值取决于函数的调用方式。因此,如果您将该函数分配给MODULE.sub
,然后将其作为MODULE.sub(…)
调用,那么此
当然将指向模块。如果您将其作为myObject.method(…)
调用,则此
将指向该对象
因此,您要么公开整个myObject
(如@bingebooys answer),要么不导出该函数,期望它是myObject
的一种方法。相反,您可以使用一个:
或者是明确的等价物
return function() {
return myObject.method();
};
或者您根本不会将函数作为method
放在该对象上:
…
var myObject = {
key: value,
};
return function() {
myObject.key // no `this` here
…
};
…
如何创建和调用子模块?更好的方法是提供一个小提琴。如果像Module.sub.method()
那样调用它,那么Module.sub
,myObject
和方法中的this
应该是同一个对象。小提琴:@josephdreamer:注意,他没有导出myObject
,但唯一的问题是function@Bergi这是15小时前编辑的。最初,myObject
已导出。
…
var myObject = {
key: value,
};
return function() {
myObject.key // no `this` here
…
};
…