Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript和#x27;这';引用,当从锚标记调用对象函数时_Javascript_This - Fatal编程技术网

JavaScript和#x27;这';引用,当从锚标记调用对象函数时

JavaScript和#x27;这';引用,当从锚标记调用对象函数时,javascript,this,Javascript,This,以下是我的JS的简化版本: var myObject = function() { return { functionOne: function() { //some other logic here }, functionTwo: function() { var self = this; //some logic here //then ca

以下是我的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>


为什么我会得到错误未捕获类型错误:当我单击链接时,对象[某些url]没有方法“functionOne”?

您的
myObject
是一个函数,需要调用才能得到该对象

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

您需要的是立即执行您的函数。除此之外,您对self变量的去极化使我认为您正在尝试创建一个闭包,以便可以从function2访问functionOne。如果是这样的话,那么我认为以下就是你所追求的:

var myObject = (function() {

    function func1( ) {
    }

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

您看到的错误没有反映您所展示的示例代码

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

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

“没有方法'functionOne'”?你确定吗?您正在尝试调用
函数二
,这应该会失败。我感觉您有
()self.functionOne
位置。
myObject
不需要作为构造函数调用。只需要调用它。@user1689607但是如果您只调用它,
这个
将引用
窗口
,这就没有什么意义了:)但是
这个
myObject
函数的任何地方都没有使用。它只返回一个包含方法的普通对象。这些方法都有
this
,如果从普通对象调用它们,它将是对普通对象的引用。所以做
myObject().functionTwo()
就行了。@user1689607嗯,你说得对。我一直在想,
这个
应该引用
myObject
:)的实例,你是对的。我道歉;不知怎的,我收到了错误的信息。我也简化了:)谢谢!
var myObject = {
    functionOne: function() {
    },
    functionTwo: function() {
        this.functionOne();
    }
}