为什么我必须使用函数的新实例来获取内部变量,但我不能使用函数本身,
为什么会起作用
function bla(){this.a = 1}
b = new bla
alert (b.a)
这不是
function bla(){this.a = 1}
alert (bla.a)
答案 0 :(得分:3)
因为你必须调用函数才能定义变量。
如果你想做你正在谈论的事情,你可以使用对象文字
var bla =
{
a: 1,
displayA: function() {
alert(bla.a);
}
};
alert(bla.a); // Displays 1
bla.displayA(); // Displays 1
答案 1 :(得分:2)
您必须创建对象的新实例。在这种情况下,第一个起作用是因为你声明了
b = new bla
只是一个小贴士,你应该写这个更像是为了防止可能的错误......
function bla(){this.a = 1;}
b = new bla();
alert(b.a);
答案 2 :(得分:0)
因为当您以这种方式使用函数时,您实际上是在创建具有属性的对象,并且如果不使用new
关键字实例化对象,则无法访问对象的属性。
你可以这样做,这也会返回1:
function bla(){ return 1;}
alert (bla());
答案 3 :(得分:0)
尚未指出的是:在案件中:
function bla(){this.a = 1}
alert (bla.a)
bla 尚未被调用为构造函数或对象的方法,因此将此关键字设置为global / window对象。因此, a 属性被添加到全局/窗口对象中,您可以执行以下操作:
alert(a)
但这通常是不理想的结果。在ES5严格模式下,以这种方式调用函数将导致其此关键字未定义,因此this.a
将引发错误。