怎么做?
var obj = {
func1 : function(){
// Do stuff
},
func2 : function(){
func1(); // does not work
this.func1(); // does not work
}
}
编辑:错过了分号
答案 0 :(得分:21)
var obj = {
func1 : function(){
// Do stuff
},
func2 : function(){
obj.func1(); // It works fine
}
}
答案 1 :(得分:7)
如果您想使用'this'关键字,您应该执行类似
的操作function obj() {
this.param = whatever;
}
obj.prototype.method1 = function(){
...
}
obj.prototype.method2 = function(){
this.method1();
}
你可以在obj函数中声明方法,但最好使用原型,因为它更有效 - 无论你创建多少个obj实例,这些函数只存在一次。如果将函数放在obj构造函数中,则obj的每个实例都有自己的函数副本。 javascript做了一些魔术来将方法调用与调用它的对象实例相关联,以确保'this'在上下文中意味着正确的事情
答案 2 :(得分:1)
我不知道为什么提出原始问题的人认为这不起作用。他们的例子确实有效。
var obj = {
func1 : function(){
console.log("doing stuff");
},
func2 : function(){
this.func1(); // works fine!
}
}
您可以将其粘贴到控制台并调用obj.func2()
,它就可以了。在这种情况下,您无需为对象命名。
但要小心。如果在func2中定义另一个匿名函数,然后尝试在 函数中使用“this”(例如,如果您正在定义),此解决方案将无效回调)。您将收到“未捕获的TypeError:this.func1不是函数”错误。在这种情况下的问题是“this”不再引用外部对象,它现在指的是新内部函数的上下文。例如:
var obj = {
func1 : function(){
console.log("doing stuff");
},
func2 : function(){
var func3 = function () {
this.func1(); // doesn't work ("this" is no longer obj)
}
func3();
}
}
要解决该问题,您可以保存“this”的本地副本。例如:
var obj = {
func1 : function(){
console.log("doing stuff");
},
func2 : function(){
var ourThis = this;
var func3 = function () {
ourThis.func1(); // works fine!
}
func3();
}
}