JavaScript面向对象的支持(下)
2010-09-14 13:37:33 来源:WEB开发网除了上述的封装权限之外,一些文档还介绍了其它两种相关的概念:
- 原型属性: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".--这表明三个函数使用了同一个局部变量.
Tags:JavaScript 面向 对象
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接