如何在js中访问这个内部原型函数

时间:2013-05-30 07:44:05

标签: node.js prototype

我在nodejs中使用nodejs和mysql客户端 我正在尝试使用mysql模块的池函数。

"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中访问它,我可以简单地在其外部设置var t = this并使用var t访问它。但在这种情况下是否还有其他方法可以访问此var。我应该在每个原型函数中定义var t = this吗?

我有详细的要点 https://gist.github.com/yalamber/6bd1df0cc27849eb09b3

1 个答案:

答案 0 :(得分:1)

您可以使用.bind()确定函数中this的内容。

精心设计的语法是:

var newfunction = oldfunction.bind(THIS_OBJECT);

这会使THIS_OBJECT成为this内的oldfunction对象。如您所见,.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相同。