我在一个子模块模式代码中工作。我想用对象字面量创建子模块,问题是子模块内的对象是模块而不是我的对象字面量的this。有什么想法吗?
var MODULE.sub = (function () {
var myObject = {
key: value,
method: function () {
this.key // this = MODULE and not MyObject... :(
}
};
return myObject.method;
}(MODULE));发布于 2013-05-28 00:32:40
解决..。只要在MODULE.sub中返回一个调用公共方法的函数即可。我不知道这是不是最好的方法
var MODULE.sub = (function () {
var myObject = {
key: value,
method: function () {
this.key // this = myObject :)
}
};
return function () {
myObject.method();
}
}(MODULE));发布于 2013-05-27 12:36:30
这对我来说很有效:
var MODULE = MODULE || {};
MODULE.sub = (function () {
return {
myObject : {
key : 10,
method : function() {
console.log(this.key);
}
}
};
})();那就叫它:
MODULE.sub.myObject.method();您只是返回方法而不是键,因此"this“将是未定义的。如果您想这样做,您可以将它保留为私有,并将key作为var传入:
var MODULE = MODULE || {};
MODULE.sub = (function () {
var key = 10,
return {
myObject : {
method : function() {
console.log(key);
}
}
};
})();发布于 2013-05-28 01:04:01
this keyword的值取决于函数的调用方式。因此,如果您将该函数分配给MODULE.sub,然后作为MODULE.sub(…)调用它,那么this当然会指向MODULE。如果您将其作为myObject.method(…)调用,那么this将指向该对象。
因此,您要么应该公开整个myObject (就像@BingeBoys answer中那样),要么不要导出该函数并期望它是myObject的一个方法。相反,您可以使用bound one:
return myObject.method.bind(myObject);或者它的显式等价物
return function() {
return myObject.method();
};或者,您根本不会将函数作为method放在该对象上:
…
var myObject = {
key: value,
};
return function() {
myObject.key // no `this` here
…
};
…https://stackoverflow.com/questions/16766214
复制相似问题