从回调访问对象的属性
Access an object's property from a callback
在我的 Node.js 脚本中,我需要从回调访问对象的属性(这里是"模型"对象的属性"错误")。我看到无法编辑此属性,但我需要它来抛出错误并停止脚本(如果"error"属性具有值,则"construct"函数返回 false,错误将在脚本的另一部分抛出)。
var underscore = require('underscore');
var mysql = require('mysql');
var baseConfig = require('../config/base');
var autoload = require('../autoload');
var core = autoload.load(baseConfig.dirs.core);
module.exports = {
name: 'model',
database: null,
error: null,
construct: function(host, user, password, database, res) {
var connection = mysql.createConnection({
host: host,
user: user,
password: password,
database: database
});
connection.connect(function(error) {
if(error) this.error = error;
});
this.database = connection;
if(this.error) return false;
},
extend: function(child) {
return underscore.extend(this, child);
}
}
我真的很想知道如何编辑此属性,因为我还没有找到解决方案。谢谢。
您对"this"有词法范围问题。 在传递给连接方法的回调函数中,"this"的作用域是当前正在执行的函数,而不是正在构建的对象。 我已经重新构建了您的代码,以便您可以访问您尝试访问的属性......还进行了重组以实现适当的原型继承,消除了对扩展方法的需求......在下面添加了一个示例
请参阅此线程: https://stackoverflow.com/a/32025281/2665925
参考 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create
var underscore = require('underscore');
var mysql = require('mysql');
var baseConfig = require('../config/base');
var autoload = require('../autoload');
var core = autoload.load(baseConfig.dirs.core);
var dbConfigObj = {
host: 'localhost',
user: 'user',
password: '12345',
database: 'CarDB'
}
function DBConnector(config, res){
var objectScope = this;
var connection = mysql.createConnection(config);
connection.connect(function(error) {
if(error) objectScope.error = error;
});
this.database = connection;
if(objectScope.error) return false;
}
DBConnector.prototype = {
name: 'model',
database: null,
error: null,
extend: function(child) {
return underscore.extend(this, child);
}
}
DBConnector.prototype.constructor = DBConnector;
function CarModel(){
DBConnector.call(this, dbConfigObj);
}
CarModel.prototype = Object.create(DBConnector.prototype,{
color: {
value: null //default value,
writable: true,
configurable:true,
}
})
CarModel.prototype.constructor = CarModel
module.exports = CarModel
相关文章:
- 为什么我可以在Array属性对象中找到Javascript Array for Each方法
- 使用onclick调用属性对象函数
- 嵌套为..in 循环,列出多维对象的属性(对象)
- 动态属性对象 - JSON
- 在不使用隔离范围angularjs自定义指令的情况下获取属性对象
- 通过属性传递属性/对象.Javascript
- Javascript:属性/对象的类型
- 访问JSON中的属性(对象)
- 属性对象Javascript不是用Jquery Deferred设置的
- 无法读取属性'#<对象>'未定义的获取错误
- Twitter中多属性对象的子字符串匹配
- 无法设置'data'属性'对象'标记.(只IE8)
- 更新数据属性对象属性值
- 将属性对象的选定对象从原型推入数组
- 将单个属性对象字面量的数组转换为仅包含其值的数组的最佳方法
- 寻找一种更简单的方法来检查是否多个属性&对象中的方法是未定义的
- 主干模型:带有get方法的空属性,但在属性对象中
- 如何赋值给"text"someText"属性对象在动能js
- Angularjs的数据绑定与数据属性对象
- 如何将一个嵌套的javascript对象转换为只有一级属性对象