Есть какая-то конкретная причина, чтобы сделать это трудным путем? Почему бы просто не добавить аргумент к функции в obj.n
?
var obj = {
test: "sure",
n : function(iWantThisHere){ console.log(iWantThisHere); }
};
obj.n("yeah");
Или даже проще (хотя область видимости становится все хуже):
var iWantThisHere = "dance time";
var obj = {
test: "sure",
n : function(){ console.log(iWantThisHere); }
};
obj.n();
Или с закрытием, а также некоторые подробности о том, как вы разделяете их открытую и закрытую части:
var obj = (function() {
var privateVariable = "i'm private";
function privilegedMethod() {
};
return {
iWantThisHere: "",
test: "sure",
n: function() {
console.log(this.iWantThisHere);
},
publicVariable: "i'm public",
publicMethod: function() {}
};
})();
obj.iWantThisHere = "hi";
obj.n(); // logs "hi"
obj.addedMethod = function() { console.log("I've been added"); }
obj.addedMethod(); // logs "I've been added";
console.log(obj.privateVariable); // logs undefined (unavailable outside closure)
console.log(obj.publicVariable); // logs "i'm public"
Другие ответы также довольно хорошо охватывают нотацию закрытия. Но суть в том, что замыкания и ограниченные области действия были бы бессмысленными в JavaScript, если бы вы могли просто вводить новые переменные везде.