두 가지 모두 문제가 될 수 있습니다. func
이 obj
의 방법으로 호출되지 않습니다 때
var obj = {
key1: "it",
key2: function(){ return this.key1 + " works!" }
};
var func = obj.key2;
alert(func()); // error
, this
다른 것을 참조 할 수 있습니다 (여기를 : 전역 객체 "window
을"). 기능의 obj
지금 다른 객체를 가리킬 수 있지만
var obj = {
key1: "it",
key2: function(){ return obj.key1 + " works!" }
};
var newref = obj;
obj = { key1: "something else"; };
alert(newref.key2()); // "something else works"
여기에서 우리는 다른 기준에서 개체에 액세스 할 수 있습니다.
그래서 어떤 경우가 더 좋을 지 선택해야합니다. 당신이 정말로 그것을 안전, 당신은 obj
이 범위가 클로저를 사용할 수 있도록하려는 변경 될 수없는 경우
var obj = (function(){
var local = {
key1: "it",
key2: function(){ return local.key1 + " works always!" }
};
return local;
})();
또는 당신에게 bind()
하여 객체에 대한 기능 :
var obj = {
key1: "it",
key2: function(){ return this.key1 + " works always!" }
}
obj.key2 = obj.key2.bind(obj);