WEB开发网
开发学院网页设计JavaScript JavaScript面向对象的支持(下) 阅读

JavaScript面向对象的支持(下)

 2010-09-14 13:37:33 来源:WEB开发网   
核心提示: 由此可见,JavaScript在处理局部变量时,对"普通函数"与"构造器"是分别对待的.这种处理策略在一些JavaScript相关的资料中被解释作"面向对象中的私有域"问题.而事实上,我更愿意从源代码一级来告诉你真相:这是对象的上

由此可见,JavaScript在处理局部变量时,对"普通函数"与"构造器"是分别对待的.这种处理策略在一些JavaScript相关的资料中被解释作"面向对象中的私有域"问题.而事实上,我更愿意从源代码一级来告诉你真相:这是对象的上下文环境的问题.--只不过从表面看去,"上下文环境"的问题被转嫁到对象的封装性问题上了.

(在阅读下面的文字之前,)先做一个概念性的说明:

- 在普通函数中,上下文环境被window对象所持有 - 在"构造器和对象方法"中,上下文环境被对象实例所持有在JavaScript的实现代码中,每次创建一个对象,解释器将为对象创建一个上下文环境链,用于存放对象在进入"构造器和对象方法"时对function()内部数据的一个备份.

JavaScript保证这个对象在以后再进入"构造器和对象方法"内部时,总是持有该上下文环境,和一个与之相关的this对象.由于对象可能有多个方法,且每个方法可能又存在多层嵌套函数,因此这事实上构成了一个上下文环境的树型链表结构.而在构造器和对象方法之外,JavaScript不提供任何访问(该构造器和对象方法的)上下文环境的方法.

简而言之:

- 上下文环境与对象实例调用"构造器和对象方法"时相关,而与(普通)函数无关 - 上下文环境记录一个对象在"构造函数和对象方法"内部的私有数据 - 上下文环境采用链式结构,以记录多层的嵌套函数中的上下文由于上下文环境只与构造函数及其内部的嵌套函数有关,重新阅读前面的代码:

//---------------------------------------------------------
// JavaScript中的局部变量
//---------------------------------------------------------
function MyFoo() {
 var i;
 MyFoo.setValue = function (v) {
   i = v;
 }
 MyFoo.getValue = function () {
   return i;
 }
}
MyFoo();
var obj1 = new Object();
MyFoo.setValue.call(obj1, 'obj1');

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:JavaScript 面向 对象

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接