2014-07-22 3 views
1

withing에에서 주요 개체에 액세스하는 나는이 객체가 : 다음자바 스크립트의 특성

var myObj = new function(){ 
    this.dateInfo = "someinfo"; 
} 

과 내가 가지고있는 다음과 같은 속성 :

myObj.add = function(){ 
    console.log("Added"); 
} 
myObj.remove.item = function(key){ 
    console.log("Item "+key+" removed."); 
} 

문제는 여기에 있습니다 :

myObj.remove.undo = function(key){ 
    // here I want to use `myObj.add()` function, what should I do? 
} 

위의 (마지막) 기능에서 myObj.add()을 사용하고 싶습니다. 어떻게 참조해야합니까? 나는 this가 (remove.undo() 안에) 트릭을하지 않는다는 것을 안다.

도움이 필요합니다. 감사. myObj이 인에

myObj.remove.undo = function(key){ 
    myObj.add(/*...*/); 
} 

여기에 또한 의존하는 두 번째 방법이다 : 당신의 myObj이   — 그냥 직접 myObj 변수를 통해 가까이 기능을 사용할 싱글이기 때문에

+5

나는, 그것은 모든 것을 쉽게 할 것이다 당신은 단순히 등'removeItem','removeUndo', 갈 건의 할 것입니다. 'this'는 역동적이기 때문에 많은 중첩 된 객체와 함수가있을 때 그것을 추적하기가 어렵습니다. – elclanrs

답변

2

이, 입니다 싱글 톤 (하나 이상의 객체를 지원하도록 수정 될 수 있음에도 불구하고) :

myObj.add = function(){ 
    console.log("Added"); 
}; 

myObj.remove = { 
    parent: myObj 
}; 

myObj.remove.item = function(key){ 
    console.log("Item "+key+" removed."); 
}; 

myObj.remove.undo = function(key){ 
    this.parent.add(/*...*/); 
}; 

다시 말하지만, '티. 나는 거라고 중 하나 elclanrs가 제안 등

  1. 사용 removeItem, removeUndo.

  2. 사용 items 및 항목이며, 문제의 "실행 취소"및 addremove 방법 (자신의 부모 개체에 대한 참조를, 내가 위에서 remove으로이 방법을 그들에게 제공 undos 속성.


사이드 참고 :

var myObj = new function(){ 
    this.dateInfo = "someinfo"; 
}; 

은 ... 길고 wastef입니다 첫 번째 방법은 myObj 그들 모두를 의미로, 프로토 타입을 통해, 자바 스크립트 엔진에있다, 그래서 둘 이유없이 혼란 최대 메모리 (의 기능과 추가 객체를 생성

var myObj = { 
    dateInfo: "someinfo" 
}; 

작성하는 UL 방법) 메모리에 보관 :

+-----------+ 
| myObj | 
+-----------+  +-------------+ 
| __proto__ |----+>| (object) | 
| dateInfo | /+-------------+  +------------------+ 
+-----------+ | | __proto__ |------>| Object.prototype | 
       | | constructor |---+ +------------------+ 
       | +-------------+ | 
       |     | 
       |     | +------------+ 
       |     +-->| (function) | 
       |      +------------+ 
       |      | __proto__ |---->(omitted, not relevant) 
       |      | prototype |--+ 
       |      +------------+ | 
       |          | 
       +----------------------------------------+ 

두 번째 방법은하지 않습니다

+-----------+ 
| myObj | 
+-----------+ +------------------+ 
| __proto__ |--->| Object.prototype | 
| dateInfo | +------------------+ 
+-----------+