如何传递JS对象的方法

How to pass methods of JS objects?

本文关键字:方法 对象 JS 何传递      更新时间:2023-09-26

当将对象方法作为函数参数传递时,我必须使用"bind"来确保该方法的上下文(this)设置正确。然后在我的代码中有很多绑定。。。这是编写JS代码的干净方法吗?推荐的传球方式是什么?也许我应该传递整个对象,或者重新设计我的对象?

谢谢。

为了供您参考,我把代码粘贴在这里。这绝对不是一个好代码。例如,我可能希望使用multi-sql语句,而不是逐个调用它们。

function insertDB(response, postData) {
  var mysql      = require('mysql');
  var async      = require('async');
  var connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'user',
    password : 'pswd',
    database : 'mydb',
  });
  async.series([
    connection.connect.bind(connection),
    async.apply(connection.query.bind(connection),
        "CREATE TABLE IF NOT EXISTS concepts ("+
        "name VARCHAR(64) NOT NULL,"+
        "priority INT NOT NULL DEFAULT 0,"+
        "date DATE NOT NULL,"+
        "notes VARCHAR(256),"+
        "PRIMARY KEY (name))"),
    async.apply(connection.query.bind(connection),
        "INSERT INTO concepts VALUES('" +
        postData["word"] + "',0,CURDATE(),'')"),
    connection.end.bind(connection)
  ], 
  function(err, result) {
    if (err) console.error(err);
  });
}

您可以使用call或application来实现这一点,这两种方法都允许您设置范围并传递所需的任何参数。调用和应用之间的区别在于调用采用逗号分隔的参数,例如:

connection.connect.call( connection, arg1, arg2, arg2 );

apply接受一个参数数组,如下所示:

var args = [ arg1, arg2, arg3 ];
connection.connect.apply( connection, args );