您好我现在正在学习JS课程并且有一个问题,无法理解:
var o = new F(4)
function F(temp){var a=22; this.temp = temp}
alert(o.temp); // print 4
alert(o.a); // print undefined
从OOP的角度来看:“F”是类/构造函数,“o”是对象,“temp”是对象的字段,那么什么是变量“a”以及如何获取它?
答案 0 :(得分:1)
o.a
,因为a
位于F
的构造函数的闭包内。
请参阅此文章:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions_and_function_scope
答案 1 :(得分:1)
当您在具有关键字var
的属性上方时,此元素仅出现在其父作用域中。
因此,在您的示例中,a
是F
类的私有成员。
例如:
'use strict';
;(function() { // private function
var a = "toto";
alert (a); // display "toto"
})(); // autocalled
alert (a); // undefined
Howether:
'use strict';
var a = "toto";
;(function() {
alert (a); // display toto
}();
;(function() {
alert (a); // display toto
}();
在此示例中,a
对于当前执行的脚本是全局的,可以在代码中的任何位置调用。
答案 2 :(得分:1)
作为旁注:JavaScript并没有像其他语言那样拥有“类”。它被称为原型或原型语言。
回答
您无法访问a
,因为它不是o
的成员。如果您想通过说o.a
来访问它,那么在构造函数中您必须编写this.a = //whatever
。
构造函数就像任何其他函数一样。使它们成为构造函数的唯一方法是new
关键字使函数查找同名原型的方式,使该函数成为其“构造函数”并设置正确的上下文。话虽如此,您在函数作用域中声明的任何局部变量将始终是该函数的本地变量,无论该函数是否伪装成该特定时间点的构造函数。