函数在 JS 对象中未定义
Function is undefined in JS object
我创建对象 var myObj = new functon () {...}
。
在那个对象中我添加了像这样的函数:
var myObj = new function () {
this.func1 = function() {
func2();
}
this.func2 = function() {
...
}
}
如您在 func1
中所见,我尝试调用 func2
但它始终未定义。为什么?因为一切都在一个对象中。
你应该这样调用func2
var myObj = new function () {
this.func1 = function () {
this.func2();
}
this.func2 = function () {
console.log('func2');
}
}
myObj.func1();
如果你想调用 func2
有 this.
和没有,你可以这样做
var myObj = new function () {
function func2() {
console.log('func2');
}
this.func1 = function() {
this.func2();
func2();
}
this.func2 = func2;
}
myObj.func1();
将您的脚本更改为
var myObj = function () {
var self = this;
this.func1 = function () {
self.func2();
};
this.func2 = function () {
...
};
};
它是未定义的,因为你没有局部变量func2
。所以正确的引用应该是this.func2()
。
然而,即使在这种情况下,您的代码也不是像这样的理想构造对象(混合构造函数和匿名函数)(尽管正确) .在这种情况下,最好首先使用对象字面量,而不是创建构造函数来仅创建一个对象实例:
var myObj = {
func1: function () {
this.func2();
},
func2: function () {}
};
在其他人提供的解决方案之上。如果您要调用这样定义的 javascript 函数
var func = function(){}
函数定义需要在函数调用之前。
在定义函数的另一种方式中,这无关紧要。
function func(){}
所以整体代码应该是
var myObj = function(){
this.func2 = function(){
...
}
this.func1 = function(){
func2();
}
}
你可以这样打电话。
直接调用func2(),查找window对象的函数。
var myObj = functon(){
var current = this;
this.func1 = function(){
current.func2();
}
this.func2 = function(){
...
}
};
我创建对象 var myObj = new functon () {...}
。
在那个对象中我添加了像这样的函数:
var myObj = new function () {
this.func1 = function() {
func2();
}
this.func2 = function() {
...
}
}
如您在 func1
中所见,我尝试调用 func2
但它始终未定义。为什么?因为一切都在一个对象中。
你应该这样调用func2
var myObj = new function () {
this.func1 = function () {
this.func2();
}
this.func2 = function () {
console.log('func2');
}
}
myObj.func1();
如果你想调用 func2
有 this.
和没有,你可以这样做
var myObj = new function () {
function func2() {
console.log('func2');
}
this.func1 = function() {
this.func2();
func2();
}
this.func2 = func2;
}
myObj.func1();
将您的脚本更改为
var myObj = function () {
var self = this;
this.func1 = function () {
self.func2();
};
this.func2 = function () {
...
};
};
它是未定义的,因为你没有局部变量func2
。所以正确的引用应该是this.func2()
。
然而,即使在这种情况下,您的代码也不是像这样的理想构造对象(混合构造函数和匿名函数)(尽管正确) .在这种情况下,最好首先使用对象字面量,而不是创建构造函数来仅创建一个对象实例:
var myObj = {
func1: function () {
this.func2();
},
func2: function () {}
};
在其他人提供的解决方案之上。如果您要调用这样定义的 javascript 函数
var func = function(){}
函数定义需要在函数调用之前。
在定义函数的另一种方式中,这无关紧要。
function func(){}
所以整体代码应该是
var myObj = function(){
this.func2 = function(){
...
}
this.func1 = function(){
func2();
}
}
你可以这样打电话。 直接调用func2(),查找window对象的函数。
var myObj = functon(){
var current = this;
this.func1 = function(){
current.func2();
}
this.func2 = function(){
...
}
};