0

有什么方法可以做到这一点?

 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()”。就像那样。

谢谢!

4

4 回答 4

1
function test()
{
    this.write = function(text)
    {
        alert(text);
    }

    this.read = function()
    {
        this.write('foo');
    }
}

var a = new test();
a.read();

jsFiddle

于 2013-01-08T15:01:38.963 回答
0

试试这个:

function test()
{

    this.write = function(text)
    {
        alert(text);
    }

    this.read = function()
    {
        this.write('foo');
    }
}

var t = new test();
t.read();

小提琴

于 2013-01-08T15:01:49.510 回答
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,但在某些情况下,“this”的含义可能会改变。

于 2013-01-08T15:03:48.847 回答
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不再引用测试/您的函数的实例。

您还可以做的是将上下文保留在局部变量中,例如

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

于 2013-01-08T15:18:38.807 回答