如何传递JS对象的方法
How to pass methods of JS objects?
当将对象方法作为函数参数传递时,我必须使用"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 );
相关文章:
- 序列化数据属性中对象的最可靠方法
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 如何从对象的原型方法访问JavaScript对象属性
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 设置嵌套对象属性的更好方法
- JQuery示例不起作用-“;对象没有't支持属性或方法'按钮'&”;
- 对象不支持属性或方法“自动完成”
- call()和apply()实际上是用来欺骗方法处理类似数组的对象的
- 对象文字方法上的Javascript绑定不起作用
- Meteor应用程序无法运行-对象#<编译器>没有方法'主机'
- 为什么我可以在Array属性对象中找到Javascript Array for Each方法
- Underscore.js某些对象的所有方法的总和
- 对象#<XMLHttpRequest>没有方法'完成'
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 丢失对象“;这个“;方法中的上下文
- 如何在ajax中调用javascript对象的方法
- 为什么页面方法对象未定义
- 如何使用在另一个文件中定义的JavaScript方法/对象
- 如何告诉JsHint忽略“未解析的函数或方法”?对象上的警告
- 使用jinja/javascript动态创建方法/对象