2012-10-24 4 views
2

다른 유형의 객체를 만들 수 있도록 Javascript로 "클래스"팩토리를 만들려고합니다.새 javascript 함수에서 self를 참조하는 방법은 무엇입니까?

var Class = function(methods) { 
    var klass = function() { 
     var self = this; 
     this.initialize.apply(this, arguments); 
    }; 

    for (var property in methods) { 
     klass.prototype[property] = methods[property]; 
    } 

    if (!klass.prototype.initialize) klass.prototype.initialize = function(){}; 

    return klass;  
}; 

그럼 내가 할 수있는 : 여기

은 내가 사용하는 기능입니다

var myObject = Class({ 
    initialize: function() { console.log(self);} 
}); 
var createdObject = new myObject(); 

그러나,을 console.log (자기가) 항상 창으로 언급하고, 나는 ' d는 객체 자체를 참조하기를 좋아합니다.

범위 문제는 알고 있지만 개체에 대한 참조를 만드는 방법은 혼란 스럽습니다.

다른 유형의 객체를 만들 수 있도록 Javascript로 "클래스"팩토리를 만들려고합니다. 여기

은 내가 사용하는 기능입니다 :

var Class = function(methods) { 
var klass = function() { 
    var self = this; 
    this.initialize.apply(this, arguments); 
}; 

for (var property in methods) { 
    klass.prototype[property] = methods[property]; 
} 

if (!klass.prototype.initialize) klass.prototype.initialize = function(){}; 

return klass;  

};

은 그럼 내가 할 수있는 :

var myObject = Class({ 
    initialize: function() { console.log(self);} 
}); 
var createdObject = new myObject(); 

그러나,을 console.log (자기)는 항상 윈도우를 참조하고, 나는 그것이 개체 자체를 참조하고 싶습니다.

범위 문제는 알고 있지만 개체에 대한 참조를 만드는 방법은 혼란 스럽습니다. 예를 들어

, 내가하고 싶었던 경우 :

var myObject = Class({ 
    initialize: function() { 
     $('#myDiv').click(function() { 
      self.anotherFunction(); 
     }); 
    }, 

    anotherFunction: function() { 
     alert('hi'); 
    } 
}); 

내가 자기와 함께 "인 myObject"를 참조 할 수 있어야합니다 ...

+1

시도'대신'self'의 this'? –

+0

'self'는 적어도 웹킷에서 전역 개체를 가리 킵니다. – dfsq

+0

오른쪽 ... 그래서 어떻게 현재 개체를 가리 킵니까? – johnnietheblack

답변

3

사용 this 대신 self. 자체는 접근 할 수 없습니다 initialize는 범위 외로 정의 된대로 klass self

최상의 옵션은 내가 제공 한 마지막 해결책으로 각 기능 내에서 self을 정의하는 것입니다.

var myObject = Class({ 
    initialize: function() { console.log(this);} 
}); 

또는

var myObject = Class({ 
     initialize: function() { console.log(createdObject);} 
    }); 

또는

var myObject = Class({ 
      initialize: function() { var self = this; console.log(self);} 
     }); 
+1

멋지 네요,하지만 어딘가에 "this"에 대한 참조를 저장해야합니다. 좁은 범위의 오브젝트 내부에서 사용할 수 있습니다 ... 예를 들어 jquery 함수 또는 something ... – johnnietheblack

+0

createdObject는 자신과 동일합니다. 그래서 self use createdObject를 사용하는 대신. – Anoop

+1

initialize 함수에 다른 enclosure를 추가한다고 가정 해 보겠습니다. function() {$ ('# myDiv'). click (function() {self.anotherFunction();}; } – johnnietheblack

관련 문제