Javascript 从另一个函数访问对象中的变量
我试图从MyFunction中访问myObject中的变量myVar,但出现此错误Javascript 从另一个函数访问对象中的变量,javascript,Javascript,我试图从MyFunction中访问myObject中的变量myVar,但出现此错误 Uncaught TypeError: Cannot read propperty 'myVar' of undefined 当运行下面的代码时 var myObject; function MyObject(){ this.myVar = 500; MyFunction(); } functio
Uncaught TypeError: Cannot read propperty 'myVar' of undefined
当运行下面的代码时
var myObject;
function MyObject(){
this.myVar = 500;
MyFunction();
}
function MyFunction(){
alert(myObject.myVar);
}
myObject = new MyObject();
我已经读过了,但仍然不知道如何访问它。调用函数时会执行它,然后将结果返回给变量 因此,函数首先执行,,然后将结果传递回变量
var myObject; // 1. new variable, undefined
function MyObject(){ // 3. execute function
this.myVar = 500; // 4. set a property
MyFunction(); // 5. call next function
}
function MyFunction(){
alert(myObject.myVar); // 6. myObject is still undefined,
} // result hasn't returned yet
myObject = new MyObject(); // 2. call function - 7. When everything is done
// executing, the result
// is returned
换句话说,你不能这么做
解决这个问题的一种方法是对MyFunction进行原型化,并保持this
的值不变
function MyObject() {
this.myVar = 500;
this.MyFunction();
}
MyObject.prototype.MyFunction = function() {
alert(this.myVar);
}
var myObject = new MyObject();
调用函数时会执行该函数,然后将结果返回给变量 因此,函数首先执行,,然后将结果传递回变量
var myObject; // 1. new variable, undefined
function MyObject(){ // 3. execute function
this.myVar = 500; // 4. set a property
MyFunction(); // 5. call next function
}
function MyFunction(){
alert(myObject.myVar); // 6. myObject is still undefined,
} // result hasn't returned yet
myObject = new MyObject(); // 2. call function - 7. When everything is done
// executing, the result
// is returned
换句话说,你不能这么做
解决这个问题的一种方法是对MyFunction进行原型化,并保持this
的值不变
function MyObject() {
this.myVar = 500;
this.MyFunction();
}
MyObject.prototype.MyFunction = function() {
alert(this.myVar);
}
var myObject = new MyObject();
你可以找到一篇好文章 下面是一个定义所需函数的示例:
你能找到一篇好文章 下面是一个定义所需函数的示例:
问题是,
myObject
是在调用myObject
之后分配的,因此如果在它内部,myObject
仍然是未定义的
一些备选方案:
function MyObject(){
this.myVar = 500;
myFunction.call(this); // Pass object as `this`
}
function myFunction(){
alert(this.myVar);
}
var myObject = new MyObject();
或
或
或
或
问题是,
myObject
是在调用myObject
之后分配的,因此如果在它内部,myObject
仍然是未定义的
一些备选方案:
function MyObject(){
this.myVar = 500;
myFunction.call(this); // Pass object as `this`
}
function myFunction(){
alert(this.myVar);
}
var myObject = new MyObject();
或
或
或
或
(我想你知道myObject
和myObject
是不同的东西(即使与解释器无关,只是它们的名称相似),但可能这会引起你的困惑,所以我只想说明一下。)
解释器将首先计算赋值的左侧(newmyobject()
),然后将其填入变量MyObject
)。这意味着,当调用函数MyObject(){…}
时,变量MyObject
尚未初始化。显然(现在),它未定义,因此出现错误
有不同的方法可以解决这个问题,Omri Aharon的方法是一种可能性。(我想你知道myObject
和myObject
是不同的东西(即使与解释器无关,只是它们的名称相似),但可能会引起你的困惑,所以我只想说明一下。)
解释器将首先计算赋值的左侧(newmyobject()
),然后将其填入变量MyObject
)。这意味着,当调用函数MyObject(){…}
时,变量MyObject
尚未初始化。显然(现在),它未定义,因此出现错误
有不同的方法可以解决这个问题,Omri Aharon的方法是一种可能性。既然
MyFunction
不是构造函数,最好把它命名为MyFunction
,更多关于构造函数、原型和它的价值可以在这里找到:既然MyFunction
不是构造函数,更好地命名它myFunction
更多关于构造函数、原型和它的价值可以在这里找到:
var myObject;
function MyObject(){
this.myVar = 500;
this.myFunction(); // Prototype method
}
MyObject.prototype.myFunction = function(){
alert(this.myVar);
}
var myObject = new MyObject();
var myObject;
function MyObject(){
var that = this;
function myFunction(){ /* Place myFunction inside MyObject. Note that this
way each instance will have a copy of myFunction */
alert(that.myVar);
}
this.myVar = 500;
myFunction();
}
var myObject = new MyObject();