2013-05-30 2 views
0

nodejs에서 nodejs 및 mysql 클라이언트를 사용 중입니다. mysql 모듈의 풀 기능을 사용하려고합니다.js의 내부 프로토 타입 함수에 액세스하는 방법

"use strict"; 
var mysqlClient = require('mysql') 
, dbPool = mysqlClient.createPool(require('../config/database')); 
function MyModel(params) { 
this.tbl = params.tbl; 
this.primary_key = params.primary_key; 
this.primary_name = params.primary_name; 
this.dbPool = dbPool; 
} 
module.exports = MyModel; 
//primary key 
MyModel.prototype.fromPK = function fromPK(pk, callback) { 
this.dbPool.getConnection(function (err, connection) { 
var query = "SELECT * FROM " + this.tbl + " WHERE " + this.primary_key + " = " + connection.escape(pk); 
connection.query(query, callback); 
}); 
}; 

내가이 내부의 getConnection을 액세서 수 없습니다 알고 난 단순히이 IT 및 VAR의 t와 액세스를 외부 = VAR (T)를 설정할 수 있습니다. 이 조건에서이 var에 액세스하는 다른 방법이 있습니다. 나는 var t = this를 각 원형 함수에서 정의해야 하나?

나는 당신이 this.bind()를 사용하여 기능에 결정할 수있는 자세한 요점을 https://gist.github.com/yalamber/6bd1df0cc27849eb09b3

답변

1

을 다음했다.

정교한 구문은 다음과 같습니다 THIS_OBJECToldfunction 내부 this 대상이 만들 것

var newfunction = oldfunction.bind(THIS_OBJECT); 

. 보시다시피, .bind()은 새로운 (바운드) 함수를 반환합니다.

당신은 비록 그 정교한 구문이 필요하지 않습니다, 그것은뿐만 아니라 익명 함수에서 작동 :

귀하의 경우
var newfunction = function() { ... }.bind(THIS_OBJECT); 

, 당신이 사용할 수 있습니다 이

this.dbPool.getConnection(function (err, connection) { 
    var query = "SELECT * FROM " + this.tbl + " WHERE " + this.primary_name + " = " + connection.escape(pn); 
    connection.query(query, callback); 
}.bind(this)); 

이것은 this한다 콜백 함수 내부에는 바깥 쪽의 this과 동일합니다.

+0

이렇게했습니다. 고맙습니다. 나는 여기에서 배울 많은 것들이 있습니다 js를 배우는 계속해야합니다 :) – Yalamber