Javascript中的类和范围

时间:2011-07-17 13:32:31

标签: javascript class scope

我在Javascript中编写了以下代码。

function main()
{
    this.a ;
    this.set = function()
    {
        a = 1;
    }
}

var l = new main();

alert("Initial value of a is "+ l.a );
l.set();
alert("after calling set() value of a is   "+ l.a );

在这两种情况下,我得到a的值为未定义。为什么即使在我调用set()之后未定义?

5 个答案:

答案 0 :(得分:7)

您需要a引用this.a

否则,您指的是局部变量a(如果您使用var,省略它已在a对象上创建了window属性,基本上是全局变量)而不是对象的属性athis将绑定到新创建的对象。)

jsFiddle

答案 1 :(得分:2)

您的“设置”功能缺少对this的引用:

   this.a = 1;

答案 2 :(得分:2)

到javascript:

function main()
{
    this.a ;
    this.set = function()
    {
        a = 1;
    }
}

看起来像

function main();

{ // starts unattached object literal
    this.a ;
    this.set = function();

    { // starts another unattached object literal 
        a = 1; // sets value to   window.a
    }
}

答案 3 :(得分:1)

除了之前的答案:Javascript中没有类,只有对象。你可以构造类似于类的东西,但是javascript继承模型是prototypal。在您的代码中,mainconstructor function,您可以从中派生实例。

许多人仍在尝试将javascript强制转换为各种经典的OOP模式。这一切都是完全可能的,但这会使语言瘫痪。花点时间观看this series of lectures

答案 4 :(得分:0)

您不能声明对象的属性未定义,因为您已经完成了它。并且您在a方法中错误地引用了属性case。这是更正:

function main() {
    this.a = null;
    this.set = function() {
        this.a = 1;
    }
}

var l = new main();

alert("Initial value of a is " + l.a);
l.set();
alert("after calling set() value of a is   " + l.a);