2015-06-30 5 views
3

У меня есть класс узла, как это:Вызов метода внутри другого класса

var Classes = function() { 
}; 

Classes.prototype.methodOne = function() { 
    //do something 
}; 

, когда я хочу позвонить methodOne, я использую это:

this. methodOne(); 

И это работает. Но сейчас я должен вызвать его из другого метода другого класса. На этот раз его не работает и доступ к косяку methodOne:

var mongoose = new Mongoose(); 
mongoose.save(function (err, coll) { 
    //save to database 
    this. methodOne(); //this does not work 
} 

как я могу назвать метадон? Я использую Classes.methodOne(), но это не работает

+1

это относится к mongoose Class –

+0

@wZVanG: да, но я хочу получить доступ к основному классу – Fcoder

ответ

5

this внутри save обратного вызова в нового контекста и другой this, чем снаружи один. сохранить его в переменной, где он имеет доступ к methodOne

var that = this; 
mongoose.save(function (err, coll) { 
    //save to database 
    that.methodOne(); 
} 
2

Вам нужно создать переменную вне функции мангустов.

var self = this; 

var mongoose = new Mongoose(); 
mongoose.save(function (err, coll) { 
    //save to database 
    self.methodOne(); //If you call `this` from here, This will refer to `mongoose` class 
} 

Если вы находитесь в среде, которая работает с ES6 вы можете использовать Arrow expression:

var mongoose = new Mongoose(); 
mongoose.save((err, col) => { 
    //save to database 
    this.methodOne(); 
}) 
2

Что вы можете сделать, это создать объект класса классов внутри другого класса и ссылаются на то, используя этот объект: Исход:

var objClasses; 
var mongoose = new Mongoose(); 
mongoose.save(function (err, coll) { 
    //save to database 
objClasses = new Classes(); 
    objClasses. methodOne(); //this should work 
} 

Если это не поможет, объясните, что именно вы хотите достичь.

Смежные вопросы