JavaScript和#x27;这';引用,当从锚标记调用对象函数时
以下是我的JS的简化版本: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
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();
}
}