我在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()之后未定义?
答案 0 :(得分:7)
您需要a
引用this.a
。
否则,您指的是局部变量a
(如果您使用var
,省略它已在a
对象上创建了window
属性,基本上是全局变量)而不是对象的属性a
(this
将绑定到新创建的对象。)
答案 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。在您的代码中,main
是constructor 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);