2016-07-02 2 views
0
var DBProcessor = function(name){this.name=name;}; 
DBProcessor.prototype.CallBack = function(err, d){ 
if (err) { 
    console.log("writeHosts. Error:", JSON.stringify(err, null, 2)); 
} else { 
    console.log(".........");   
    console.log(this.name); // >>>> UNDEFINED 
    console.log("........."); 
} 
} 
var DBP = new DBProcessor("Hosts"); 
function writeHosts(){ 
... 
..   
db.batchWriteItem(param, DBP.CallBack);} 

를 호출 할 수있는 방법을보고 난 DBP.CallBack가 호출되는 방식에는 영향이 없습니다이 손실 범위 내가/적용 사용 전 "이"잃고 범위 DBP 내부 변수를 얻을 수있는 방법

var doc = require('dynamodb-doc'); 
var db = new doc.DynamoDB(); 

그래서 내가 어떻게 apply() 또는 call()을 사용할 수 있는지 알지 못합니다.

답변

1

호출 방법에 영향을주지 않으면 프로토 타입 함수로 사용할 수 없습니다. 어느 쪽이든 bind을 생성자에 넣거나 생성자 내에서 클로저로 정의하고 이전 var _this = this; 트릭을 사용하여 올바른 this 참조를 유지합니다.

+0

확실하지 바인드와 여기

function DBProcessor(_this){ _this = this; this.b = 1; this.CallBack = function(err, d){ if (err) { console.log("writeHosts. Error:", JSON.stringify(err, null, 2)); } else { console.log(_this.a); console.log(_this.b); console.log("........."); } }; return this;} var DBP = new DBProcessor(); DBP.a = 2; 

에 "바인딩"구글 할 수 있도록 어떤 작품 당신은 이 이음새가 작동하는 것을 의미합니다 함수 DBProcessor { return { 콜백 : 함수 (err, d) { if (err) { console.log ("writeHosts. 오류 : ", JSON.stringify (err, null, 2)); else { console.log ("......... "); console.log (_this.a); console .LOG (".........");} }}} VAR의 DBP = {A : 1} DBP.p 새로운 DBProcessor = (DBP) – Ino

+0

@Ino : 매우 이상한 방법입니다. 내 대답의 어떤 부분을 이해하지 못했습니까? 바인딩에 대한 설명서를 읽었습니까? 클로저가 무엇인지 압니까? 그렇지 않다면, 인터넷 검색을하는 것이 좋습니다. –

0

흠 현재 나는이 있고 어떤이에 대해 말하는 경우 나 이제 그 동안

function DBProcessor(){ 
return { 
    a:1, 
    _CallBack: function (err, d){ 
     if (err) { 
      console.log("writeHosts. Error:", JSON.stringify(err, null, 2)); 
     } else { 
      console.log(this.a); 
      console.log(this.b); 
      console.log("........."); 
     } 
    } 
}; 
} 

var DBP = new DBProcessor(); 
DBP.b = 2; 
DBP.CallBack = DBP._CallBack.bind(DBP);