2013-05-30 52 views
0

我在nodejs中使用nodejs和mysql客戶端 我想用mysql模塊的池函數od。如何在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,我可以簡單地設置變種T =此之外,並與VAR牛逼訪問它。但在這種情況下是否有其他方式來訪問這個var。我應該在每個原型函數中定義var t = this嗎?

我有以下的詳細要點 https://gist.github.com/yalamber/6bd1df0cc27849eb09b3

回答

1

你可以決定什麼this在使用.bind()功能。

精心製作的語法是:

var newfunction = oldfunction.bind(THIS_OBJECT); 

這將使THIS_OBJECToldfunctionthis對象。正如你所看到的,.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

相關問題