易截截图软件、单文件、免安装、纯绿色、仅160KB

一家之言:说说 JavaScript 的类成员的访问控制

看书的时候遇到这样一个问题,程序代码如下
var ob = function(){
var obj = this;
function fn1(){
alert( obj === window );//false
alert( this === window );//ture
}
this.fn2 = function() {
fn1();
}

当时很不明白fn1里面第二个alert的结果,为什么this会指向window?
我在群里讨论这个问题,引发一场关于js私有函数的讨论,今天我就说说js的类成员访问控制,郑重声明这只是我的个人观点,仅供讨论。
所谓js的类成员访问机制就是常说的公共成员、私有成员、保护成员。
1 公共成员public member
js实现公共方法是通过prototype属性,prototype是每个对象都具有的一个特别的成员,它定义了对象的内部结构,很类似其他面向对象语言(比如C++)的传统的类(Class),如果你对面向对象不了解,就把它理解为一个对象的蓝图,一旦它被修改,那么所有这个对象的实例和继承这个对象的实例都会发生改变(有点拗口)。
举个例子
// 创建一个构造方法
function myConstructor(message) {
alert(message);
this.myMessage = message;
}
// 添加一个公共方法
myConstructor.prototype.clearMessage = function(string) {
this.myMessage += ' ' + string;
}
//实例一个对象,通过实例调用对象的公共方法
var myObject = new myConstructor('Hello World!');
myObject.clearMessage(); 
但是我们不能直接用myConstructor.clearMessage(),因为myConstructor本身是Function对象的实例,而Function本身是没有clearMessage()这个方法的。
关于prototype我想多说一点,关于prototype链,因为每个对象都有一个prototype属性,而prototype本身也是一个对象,所以它也可以包含自己prototype,这样就形成了一个链条,直到链条的最末端就是prototype为null
举个例子
// 第一个构造方法
lor: #0000ff;">function MyObject1(formalParameter){
//保护成员(后面会讨论,这里可以理解为公共方法)
this.testNumber = formalParameter;
}
//第二个构造方法
function MyObject2(formalParameter){
//保护成员
this.testString = formalParameter;
}
//把第一个对象的实例赋给第二个对象的prototype属性
MyObject2.prototype = new MyObject1( 8 );
//最后,实例化第二个对象
var objectRef = new MyObject2( "String_Value" );
/


相关文档:

javascript获取服务端控件值的两种办法

第一种:
+展开
-HTML
<html> 
<head> 
</head> 
<body> 
<form name="form1"> 
<input type="text" name="getinfo" value="http://www.shuwo.net" size="40"><button onclick="alert(document.form1.getinfo.value ......

Client Side JavaScript Validation

Struts Validator Framework provides an easy-to-use mechanism for performing client-side validation. It's very useful to validate some fields on the client-side before sending the data to the server for processing. By this way we can ensure that the data send to the server is valid. Performing valida ......

JavaScript 判断上传文件类型

function
 Check_FileType(str)
{
 
var
 pos 
=
 str.lastIndexOf(
"
.
"
);
 
var
 lastname 
=
 str.substring(pos,str.length)  //此处文件后缀名也可用数组方式获得str.split(".")
 
if
 (lastname.toLowe ......

javascript中event.keycode

javascript中event.keycode
 keycode 8 = BackSpace BackSpace
keycode 9 = Tab Tab
keycode 12 = Clear
keycode 13 = Enter
keycode 16 = Shift_L
keycode 17 = Control_L
keycode 18 = Alt_L
keycode 19 = Pause
keycode 20 = Caps_Lock
keycode 27 = Escape Escape
keycode 32 = space space ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号