Javascript:添加动态方法
Javascript: adding dynamic method
我遇到了以下问题。
我有不同的对象,例如:
使用方法的用户:ID、用户名、名字、姓氏
文章:用其他方法;
我想添加动态方法,如getById,getByUsername 等。
var object = new Object() ; // Object can take the value user, article or other. </code>
for(var key in object) {
this["getBy" + key]= function(args) {
var result = query("SELECT * FROM " + object.name + ' WHERE ' key + "=" +args);
console.log(key); //always return the last key of object
return(result);
}
// then
var user = new User();
user.getByUsername('someone');
当函数中没有参数时,像这样的动态添加方法可以正常工作。所有方法都定义得很好,但是当我将它们称为键作为更改(当然)时,我只有最后一个函数。
如果有人能帮助我,我整天都在这件事上,但我仍然找不到解决方案。
var User = function(id, username, firstname, lastname) {
this.name = 'user';
this.id = id;
this.username = username;
this.firstname = firstname;
this. lastname = lastname;
};
var Find = function(objectName){
var object = new objectName();
// I have a first method all
// this refers to find object
this.all = connection.query("SELECT * FROM " + objectName);
//then I want to add ByX method, X taking the values id, username ...
for( key in object ) {
if(key != "name") { // I exclude name method of user
var query = "SELECT * FROM user WHERE " + key + "=" ;
this['By'+key] = function(args) {
query += args;
return(connection.query(query);
};
}
// then In my code
var find = new Find('User');
var list = find.ByX(something);
list
.on("error", function(err){
console.log(err);
})
.on('result' function(row){
console.log(row);
})
;
当代码被编译时 对象 查找有方法 ByX,但是当我运行时 找到。ByX(某物);
传递给最后一个值的键恰好是姓氏。它正在运行
var query = "SELECT * FROM user WHERE " + key + "=" ;
function(args) {
query += args; // query is recalculated and key is now lastname;
...
}
我在代码中的其他地方以这种方式执行此操作,但似乎因为函数正在等待 args 值,因此未设置查询。
我解决了我的问题,当我调用函数 ByX 时,键的值是我对象中的最后一个。所以我把函数放在一个闭包中。但在闭包内部,这并不是指查找,而是一个一般对象。
所以我只是把它放在我的闭合中。
for(var key in Object){
var query = 'SELECT * FROM user WHERE ' + key + "=''";
(function(insideQuery, obj){
console.log(obj);
addMethod("By"+key, obj, function(args) {
insideQuery+= args + "''";
console.log(insideQuery);
return(connection.query(insideQuery));
});
})(query, this);
}
function addMethod(key, obj, fn){
obj[key] = fn;
}
它正在做我想要的。
相关文章:
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 你能把一个匿名方法(函数)动态地变成一个命名方法吗
- 当用户点击动态创建的链接时,如何调用JS方法.JQuery,ASP.NET MVC
- 有没有一种方法可以用YepNope.js为脚本提供动态名称
- 在extJS 4.2中,有没有一种方法可以将模型值动态绑定到表单
- 当从Chrome扩展动态注入JS时,从onload()内部调用方法
- 有没有一种方法可以基于Angular 2中注册的路线构建动态导航/菜单
- 离子滑块 - 有一种方法可以动态更改间隔
- 如何在jQuery的.on()方法中动态更新按钮的ID选择器
- AngularJS中的动态表单验证 - 是否有更好的解决方案/方法
- jQuery .change() 方法不适用于动态创建的复选框
- 在我的上下文中添加对象的动态方法
- 如何用document.createElement(“input”)方法使输入文本字段动态扩展
- 有没有一种方法可以创建一个对象并同时为其指定一个动态特性
- 按方法动态更改元素数据
- jsTree-使用AJAX/C#Web方法动态填充树
- 为对象中的所有方法动态地准备一个参数
- 使用getjson方法动态地从json中获取数据并循环这些值
- 如何在ajax中使用jquery get方法动态修改html
- 数据表使用fnAddData或类似的方法动态添加行,并向特定列添加类