Javascript 从另一个函数访问对象中的变量

Javascript 从另一个函数访问对象中的变量,javascript,Javascript,我试图从MyFunction中访问myObject中的变量myVar,但出现此错误 Uncaught TypeError: Cannot read propperty 'myVar' of undefined 当运行下面的代码时 var myObject; function MyObject(){ this.myVar = 500; MyFunction(); } functio

我试图从MyFunction中访问myObject中的变量myVar,但出现此错误

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();