Я использую NLog, и я очень удовлетворен. Исходный код правильно написан, и легко расширить и изменить. Документация хороша, и очень легко настроить.
Некоторые Ссылки:
Я думаю, проблема в том, что когда this.C ()
выполняется внутри функции, на которую ссылаются B
, this
] относится к объекту, содержащему B
, то есть объекту A
. (Предполагается, что B ()
вызывается в контексте A
)
Проблема в том, что C
не существует на объекте A
, поскольку он определен в B
. Если вы хотите вызвать локальную функцию C ()
в B
, просто используйте C ()
.
EDIT:
Кроме того, я не уверен, что то, что вы опубликовали, является правильным JavaScript. В частности, B
должен быть определен таким образом, поскольку вы не можете использовать синтаксис object: property внутри функции.
B: function()
{
var test='test';
var result='t1';
var C = function()
{
this.test='test1';
return 'test1';
}
result=C();
return result;
}
Вы должны быть осторожны, когда используете this для идентификации чего-либо в Javascript, потому что каждый раз, когда вы меняете область видимости, "this" изменяется.
Назначение ссылки "this" его собственная переменная помогает обойти это.
var a = new function() {
var self = this;
self.method = function() { alert('hiya'); };
var b = function() {
this.method(); // this isn't 'a' anymore?
self.method(); // but 'self' is still referring to 'a'
};
};
I am actually surprised that your code doesn't give you error on the 'C:' line.
Anyway, your syntax to define a function is not correct. Define it using the var keyword. Also, notice that I created the 'closure' so that the function C can access 'this'. See the code below:
A={
CA: function()
{
this.B();
},
B: function()
{
var test='test';
var result='t1';
var self = this;
var C = function()
{
self.test='test1';
.....
.....
return 'test1';
}
result=C();
return result;
}
}
If you want to assign C to 'this' object, you can also do:
A={
CA: function()
{
this.B();
},
B: function()
{
var test='test';
var result='t1';
var self = this;
this.C = function()
{
self.test='test1';
.....
.....
return 'test1';
};
result= this.C();
return result;
}
}