我有以下对象:
isLoggedIn
现在我需要开始将函数console.log(req.flash('loginMessage'))
传递给不同上下文中的API。我的问题是dog = {
location: {
x: 52.1089,
y: 16.2323
},
f: function(message) {
alert(message + this.location.x);
return;
}
};
并不总是指我的对象,而是指不同的东西,这取决于它的调用方式。如何在函数dog.f
中访问this
等属性?
location
,但我不想在每个函数调用中初始化f
内的位置,所以我认为对象是最好的主意。这是我的第一次尝试:
f
但在每个函数调用中初始化位置看起来都很浪费。
编辑2:我愿意接受咖啡因解决方案
答案 0 :(得分:4)
您可以使用bind
method设置方法的上下文:
var func = dog.f.bind(dog);
当您从任何地方拨打func
时,它将具有与被称为dog.f
时相同的上下文。
注意:旧版浏览器不支持bind
方法,例如IE 8及更早版本,因此您需要使用' polyfill'如果你需要支持那些。我链接到的文档中有一个。
答案 1 :(得分:2)
您可以考虑使用闭包(请参阅Private Members in JavaScript):
var dog = (function() {
var location = {x: 52, y:16};
return {
getLocation: function() {
return [location.x, location.y];
},
setLocation: function (newX, newY) {
location.x = newX;
location.y = newY;
},
showMessage: function(message) {
alert(message + location.x);
}
};
}());
dog.showMessage('here : ');
答案 2 :(得分:0)
您可能想要这样做
var Dog = function() {
this.location = {
x: 52.1089,
y: 16.2323
};
this.f = function(message) {
alert(message + this.location.x);
return;
}
};
var dogObj = new Dog();
dogObj.f("Hellow World!");