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

JavaScript面向对象的支持(下)

 2010-09-14 13:37:33 来源:WEB开发网   
核心提示: 除了上述的封装权限之外,一些文档还介绍了其它两种相关的概念:- 原型属性:Classname.prototype.propertyName = someValue- (类)静态属性:Classname.propertyName = someValue 然而,从面向对象的角度上来讲,上面这些

除了上述的封装权限之外,一些文档还介绍了其它两种相关的概念:

- 原型属性:Classname.prototype.propertyName = someValue - (类)静态属性:Classname.propertyName = someValue 然而,从面向对象的角度上来讲,上面这些概念都很难自圆其说:JavaScript究竟是为何、以及如何划分出这些封装权限和概念来的呢?

——因为我们必须注意到下面这个例子所带来的问题:

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

// 测试一

  MyFoo.setValue.call(obj1, 'obj1');
  document.writeln(MyFoo.getValue.call(obj1), '<BR>');

// 测试二

  MyFoo.setValue.call(obj2, 'obj2');
  document.writeln(MyFoo.getValue.call(obj2));
  document.writeln(MyFoo.getValue.call(obj1));
  document.writeln(MyFoo.getValue());

在这个测试代码中,obj1/obj2都是Object()实例.我们使用function.call()的方式来调用setValue/getValue,使得在MyFoo()调用的过程中替换this为obj1/obj2实例.

然而我们发现"测试二"完成之后,obj2、obj1以及function MyFoo()所持有的局部变量都返回了"obj2".--这表明三个函数使用了同一个局部变量.

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

Tags:JavaScript 面向 对象

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