好的,刚刚解决了this refered to the wrong scope的一个问题。现在我有另一个问题。
所以我想调用 方法 。但我不知道如何,请查看此来源:
function someObj() {
var self = this;
this.someMethod1 = function() {
var elementBtn = document.getElementById('myBtn');
elementBtn.onclick = function() {
self.someMethod2.methodMethod();
//I want this.someMethod2.methodMethod() to be called
//...but I get an big error instead. Is it even possible?
//this.someMethod2() works fine.
};
};
this.someMethod2 = function() {
this.methodMethod = function() {
alert('THIS IS THE ONE I WANTED!');
};
alert('NO, NOT THIS!');
};
}
错误消息:
未捕获的TypeError:对象函数(){...
答案 0 :(得分:3)
使用您的代码,someMethod2
需要先执行才能分配函数表达式。即使这样,它也会被分配给父实例。
请记住,所有函数都是JavaScript中的对象,而这正是您想要的:
this.someMethod2 = function() {
alert('NO, NOT THIS!');
};
this.someMethod2.methodMethod = function() {
alert('THIS IS THE ONE I WANTED!');
};
答案 1 :(得分:2)
您正在尝试在函数上使用对象访问器。如果您希望它以这种方式工作,您需要从调用“外部”函数返回一个对象文字。
this.someMethod2 = function() {
return {
methodMethod: function() {
alert('THIS IS THE ONE I WANTED!');
}
}
};
然后,您可以将呼叫链接起来。 self.someMethod2().methodMethod();
答案 2 :(得分:0)
虽然这不是直接可行的,但您可以将“命令”传递给外部函数以告诉它执行内部函数。但是,你确定这是你真正需要的吗?也许你应该在这里使用对象而不是函数。但这是“命令”方式:
this.someMethod2 = function(cmd) {
var methodMethod = function() {
alert('THIS IS THE ONE I WANTED!');
};
if (cmd === "methodMethod") {
methodMethod();
return;
}
alert('NO, NOT THIS!');
};
答案 3 :(得分:0)
试图
function someObj() {
var self = this;
this.someMethod1 = function() {
var elementBtn = document.getElementById('myBtn');
elementBtn.onclick = function() {
self.someMethod2().methodMethod();
};
this.someMethod2 = function() {
this.methodMethod = function() {
alert('THIS IS THE ONE I WANTED!');
};
alert('NO, NOT THIS!');
return this;
};
}
此外,如果您使用原型,那么
function someObj() {
var self = this;
this.someMethod1 = function() {
var elementBtn = document.getElementById('myBtn');
elementBtn.onclick = function() {
self.someMethod2.methodMethod();//['methodMethod']();
};
};
this.someMethod2 = function() {
};
this.someMethod2.methodMethod = function() {
alert('THIS IS THE ONE I WANTED!');
};
};
但方法 methodMethod 是静态的
答案 4 :(得分:0)
function someObj() {
var self = this;
this.someMethod1 = function () {
var elementBtn = document.getElementById('myBtn');
elementBtn.onclick = function () {
self.someMethod2().methodMethod();
};
};
this.someMethod2 = function () {
this.methodMethod = function () {
alert('THIS IS THE ONE I WANTED!');
};
//return this for chain method.
return this;
};
}