这个失败的范围没有看到我如何使用申请/电话

时间:2016-07-02 04:11:47

标签: scope this

var DBProcessor = function(name){this.name=name;};
DBProcessor.prototype.CallBack = function(err, d){
if (err) {
    console.log("writeHosts. Error:", JSON.stringify(err, null, 2));
} else {
    console.log(".........");        
    console.log(this.name);  // >>>> UNDEFINED
    console.log(".........");
}
}
var DBP = new DBProcessor("Hosts");
function writeHosts(){
...
..         
db.batchWriteItem(param, DBP.CallBack);}

我怎样才能在DBP中获得一个变量"这个"正在失去范围,我没有影响如何调用DBP.CallBack

var doc = require('dynamodb-doc');
var db = new doc.DynamoDB();

所以我不知道如何使用apply()或call()

2 个答案:

答案 0 :(得分:1)

如果你对它的调用没有影响,你就不能将它作为原型函数。在构造函数中bind,或者在构造函数中将其定义为闭包,并使用旧的var _this = this;技巧来保持对正确的this的引用。

答案 1 :(得分:0)

Hmmmm 目前我有这个,它的工作原理 如果有任何言论反对这个让我现在将google" bind"同时

function DBProcessor(_this){
_this = this;
this.b = 1;
this.CallBack = function(err, d){
    if (err) {
        console.log("writeHosts. Error:", JSON.stringify(err, null, 2));
    } else {
        console.log(_this.a);
        console.log(_this.b); 
        console.log(".........");
    }
};
return this;}
var DBP = new DBProcessor();
DBP.a = 2;

这里有bind

function DBProcessor(){
return {
    a:1,
    _CallBack: function (err, d){
        if (err) {
            console.log("writeHosts. Error:", JSON.stringify(err, null, 2));
        } else {
            console.log(this.a);
            console.log(this.b);
            console.log(".........");
        }
    }
};
}

var DBP = new DBProcessor();
DBP.b = 2;
DBP.CallBack = DBP._CallBack.bind(DBP);