JS类和对象

时间:2014-02-20 13:14:21

标签: javascript class oop

您好我现在正在学习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”以及如何获取它?

3 个答案:

答案 0 :(得分:1)

无法访问

o.a,因为a位于F的构造函数的闭包内。

请参阅此文章:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions_and_function_scope

答案 1 :(得分:1)

当您在具有关键字var的属性上方时,此元素仅出现在其父作用域中。

因此,在您的示例中,aF类的私有成员。

例如:

'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关键字使函数查找同名原型的方式,使该函数成为其“构造函数”并设置正确的上下文。话虽如此,您在函数作用域中声明的任何局部变量将始终是该函数的本地变量,无论该函数是否伪装成该特定时间点的构造函数。