2013-12-10 3 views
0

자바에서는 Async.series에서 실행할 함수의 배열을 만들려고합니다.프로토 타입 함수를 캐시하면 속한 객체를 캐시하지 않습니다.

자바 스크립트 :

function Field(name, height, width) { 
    this.name = name; 
    this.height = height; 
    this.width = width; 
} 

Field.prototype.doSomething = function(callback) { 
    console.log(name, width, height); 
    // do some stuff with name, height etc. and produce someResults 
    callback(undefined, someResults 
} 

문제 :

// Dict of Functions 
var functions = {}; 

// Array of Field Objects 
fields.forEach(function(field) { 
    functions[field.name] = field.doSomething; 
} 

Async.series(functions, callback); 

문제는 함수가 너무 기능을 실행하려고 할 때 예외를받을 때 내 모든 "클래스"변수가 캐시되지 않습니다이다 Async.series (이름, 너비 및 높이가 정의되지 않음).

내가이 문제를 어떻게 해결할 수 있을지에 대한 아이디어가 있습니까?

답변

2

나는 bind를 사용하는 것이 좋습니다 것입니다 :

fields.forEach(function(field) { 
    functions[field.name] = field.doSomething.bind(field); 
} 

그렇지 않으면 doSomething 내부 this의 값이 당신이 원하는 될 것입니다 가능성은 없다. bind을 호출하면 bind이 호출 될 때 이 field의 값으로 설정됩니다.

+0

놀라워요! 정말 고마워 완벽 해! –