一家之言:说说 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" );
/
相关文档:
//Textarea maxlength
//flag:text框名字,num:限制的字节数
function maxLen(flag,num){
if(document.getElementById('lastMessage').value=="0" || document.getElementById('lastMessage').value==flag){
var i=document.getElementById(flag).value.replace(/[\u0 ......
翻译:为之漫笔
链接:http://www.cn-cuckoo.com/2007/08/01/understand-javascript-closures-72.html
简介
基于对象的属性名解析
值的指定
值的读取
标识符解析、执行环境和作用域链
执行环境
作用域链与 [[scope]]
标识符解析
闭包
自动垃圾收集
构成闭包
通过闭包可以做什么?
例 1:为函数 ......
第一种:
+展开
-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 ......
最近一直为此头痛,姑且把我能想到的东西都写出来吧。由于不是简单把页面上手写的script转为javascript添加,我们需要考虑的东西主要有两个:加载的顺序,加载前后脚本的运作。
先说第一个,假如我们已有一加载机制了,要加载一个新模块,当然新模块是在另一个JS文件中。这时,我们可以描述为:
loader ---> a.js
这个加 ......
上面所说有关HTML的内容非常少又简单,但对已经了解的人来说就是没用的.
如有问题可到权威网 http://www.html.com/ 上查看
以下开始说说关于XML的一些知识.
XML也是标记语言,可它是自定义的,没有已给定格式.不具体说它,给出例子就可明了.
如
<NAME>TOM</NAME>
<SEX>M</SEX>
以上内容的< ......