从锚标记调用对象函数时,JavaScript,'this'引用

时间:2012-11-22 23:35:01

标签: javascript this

这是我的JS的简化版本:

var myObject = function() {
    return {
        functionOne: function() {
            //some other logic here
        },
        functionTwo: function() {
            var self = this;
            //some logic here
            //then call functionOne
            self.functionOne();
        }
    };
}

然后我在html的主体中有这个:

<a href="#" onclick="myObject.functionTwo()">click me</a>

为什么我会收到错误 Uncaught TypeError:当我点击链接时,对象[某个网址]没有方法'functionOne'

3 个答案:

答案 0 :(得分:1)

您的myObject函数,需要调用才能获取该对象

<a href="#" onclick="myObject().functionTwo()">click me</a>

为什么不将myObject定义为对象:

var myObject = {
    functionOne: function() {
        //some other logic here
    },
    functionTwo: function() {
        var self = this;
        //some logic here
        //then call functionOne
        self.functionOne();
    }
};

答案 1 :(得分:1)

您看到的错误并未反映您显示的示例代码。

那就是说,在您使用代码的方式中,您应该能够将其简化为:

var myObject = {
    functionOne: function() {
    },
    functionTwo: function() {
        this.functionOne();
    }
}

答案 2 :(得分:0)

您需要的是立即执行您的功能。除此之外,您对 self 变量的声明使我认为​​您正在尝试创建一个闭包,以便您可以从functionTwo访问functionOne。如果是这种情况,那么我认为以下是你所追求的:

var myObject = (function() {

    function func1( ) {
    }

    function func2( ) {
        func1();
    }
    return {
        functionOne: func1,
        functionTwo: func2
    };
}());