如何在一个函数中声明一个全局变量赋值,并在javascript中的另一个函数中使用

时间:2013-04-02 05:57:07

标签: javascript global-variables

我只是编写一个测试html文件来了解javascript中的对象。代码如下

脚本标记

中的

<script type="text/javascript">

    var obj = new ParentFn();
    var obj2 = new AnotherParentFn();
    var temp;
    function initer()
    {
        temp = obj.Adding();
        obj2.caller();
    }
    function ParentFn()
    {
        this.a = 10;
        this.b = 20;
    }
    function AnotherParentFn()
    {
        this.a = 30;
        this.b = 50;
    }
    AnotherParentFn.prototype.caller = function()
    {
        var self = this;
        temp();
    }
    ParentFn.prototype.Adding = function()
    {
        var self = this;
        document.getElementById("id_div1").innerHTML = " Method Called and Result of a+b is " + (self.a + self.b);          
    }

</script>

在我体内使用

<button onclick="initer()"> Click here to test </button>
<div id="id_div1"></div>

问题是当从initer()函数调用AnotherParentFn.prototype.caller时,temp变量仍未定义。代码有什么问题?

我的任务是在全局变量中分配函数ParentFn.prototype.Adding,并从AnotherParentFn.prototype.caller函数调用全局变量。怎么实现呢?

4 个答案:

答案 0 :(得分:1)

您无需将其另存为全局变量。它已保存在ParentFn.prototype中。您需要做的只是使用.call调用它并传入您想要的接收器。您可以像这样实施AnotherParentFn.prototype.caller

AnotherParentFn.prototype.caller = function()
{
    ParentFn.prototype.Adding.call(this);
}

这样你就可以完全摆脱temp。您也无需在任何地方将this分配给本地var self

答案 1 :(得分:0)

通过编写temp = obj.Adding();,它存储了返回值。不是temp中的函数指针。使用此

function initer()
{
    temp = obj.Adding;
    obj2.caller();
}

答案 2 :(得分:0)

括号用于执行函数。 将值分配给temp时,您正在调用该函数并将结果(undefined)分配给temp。要在temp中存储对函数的引用,请省略括号。

temp = obj.Adding;

答案 3 :(得分:0)

首先,obj.Adding的引用未正确分配;它应该是这个(没有括号):

function initer()
{
    temp = obj.Adding;
    obj2.caller();
}

然后,在AnotherParentFn.prototype.caller内部,您必须使用.call()在调用期间显式地将当前对象作为this传递:

AnotherParentFn.prototype.caller = function()
{
    temp.call(this);
}