访问同一功能内的其他功能

时间:2013-01-08 14:57:35

标签: javascript

有一些方法可以做到这一点吗?

 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 个答案:

答案 0 :(得分:1)

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

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

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

jsFiddle

答案 1 :(得分:0)

试试这个:

function test()
{

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

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

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

fiddle

答案 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'

并调用此实例的方法readthis将引用,此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