有一些方法可以做到这一点吗?
function test()
{
this.write = function(text)
{
alert(text);
}
this.read = function()
{
this.write('foo');
// WRONG WAY
// test.write('foo');
}
}
如何从“this.read”调用“this.write”函数?
修改
找到了EricG的芒果。尝试过上面的代码,它的工作原理。但我的真实代码仍无效。我要弄清楚发生了什么。
从“THIS.READ”里面调用“THIS.WRITE”的方法只是调用'this.write()'。就像那样。
谢谢!
答案 0 :(得分:1)
function test()
{
this.write = function(text)
{
alert(text);
}
this.read = function()
{
this.write('foo');
}
}
var a = new test();
a.read();
答案 1 :(得分:0)
试试这个:
function test()
{
this.write = function(text)
{
alert(text);
}
this.read = function()
{
this.write('foo');
}
}
var t = new test();
t.read();
答案 2 :(得分:0)
function test()
{
var self = this;
this.write = function(text)
{
alert(text);
};
this.read = function()
{
self.write('foo');
};
// depending on browser versions or included libraries.
this.another = function () {
this.write('foo');
}.bind(this);
}
你也可以在没有绑定调用的情况下使用它,但在某些情况下,'this'的含义可能会改变。
答案 3 :(得分:0)
这完全取决于调用函数的位置。
我建议您阅读有关this
关键字的更多信息。或许请查看此SO question
如果您创建test
function test()
{
this.write = function(text)
{
alert(text);
}
this.read = function()
{
this.write('foo');
}
}
var inst = new test()
inst.read() //foo
inst.read.call() //Uncaught TypeError: Object [object Window] has no method 'write'
并调用此实例的方法read
,this
将引用井,此test
但是,如果您的代码不起作用,则可能使用其他上下文调用该方法。
也许你添加了一个Eventlistener。它的回调函数试图调用this.write
然后this
将不再引用test / your function的实例。
您还可以做的是在
这样的局部变量中保留上下文function test()
{
var context = this;
this.write = function(text)
{
alert(text);
}
this.read = function()
{
context.write('foo');
}
}
var inst = new test()
inst.read() // foo
inst.read.call() //foo
正如您在第二种情况下看到的那样write
被执行,尽管调用了read
并将全局对象Window
作为其上下文。
继承人JSBin