一家之言:说说 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 调用客户端应用程序-->
<script type="text/javascript">
function exec(command)
{
window.oldOnError = window.onerror;  ......
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 ......
<script language="javascript">
function closeOpen(Panel) {
var test = document.getElementById('Panel');
if (test.style.display == "none") {
&nb ......
Lua与javascript的差异 - [lua学习]
转载
http://huazjxy.blogbus.com/logs/60132016.html
Lua模拟器js方案
1.语法级模拟
lua与js语言差异
1.1注释
js 为//,lua为--.
1.2变量
js利用val来声明全局变量不存在局部变量,lua则不需要直接定位则为全局变量,local声明则为局部变量。
1.3运算符
js
+ - ......
最近一直为此头痛,姑且把我能想到的东西都写出来吧。由于不是简单把页面上手写的script转为javascript添加,我们需要考虑的东西主要有两个:加载的顺序,加载前后脚本的运作。
先说第一个,假如我们已有一加载机制了,要加载一个新模块,当然新模块是在另一个JS文件中。这时,我们可以描述为:
loader ---> a.js
这个加 ......