关于javascript中的类和jquery-1.2.6.js的理解
<!--
/*
先申明一点:如果要查看下面的脚本,直接,把//去掉就可以
javascript定义类的另类方法:var 类名 = {
成员变量:值,
成员函数名:function(参数){}
};
格式
那么既然是类,怎么实现继承呀?看下例,使用prototype来继承
*/
var cp = {
tn:23,
t1:"t1",
t2:"t2",
f1:function()
{
return "f1";
},
f2 : function()
{
return "f2";
}
};
var cp1={}.prototype = cp;
//alert(cp1.t1);
/*
我们继承的目的,是为了实现扩展和多态
*/
cp1.t3 = "t3";
cp1.f3 = function(){
return this.t3;
}
/*
实现了类外部,增加成员变量和成员函数的功能
*/
cp1.f2 = function(tt){
return tt;
}
/*
实现了重载,是overwrite的方式,不是overload
*/
//alert(cp1.f2(233));
//alert(cp.f2(233));
/*但是,jQuery,是这样定义的;*/
var cp = {};
cp.fn = cp.prototype = {
t1:23,
t2:"24",
f1:function()
{
return 123;
},
f2 : function()
{
return 34;
}
};
cp.fn.f1.prototype = cp.fn;
//alert(cp.fn.f1());
/*
此外,jQuery,定义类的样子,非常怪异
*/
(function()
{
var jQuery = window.jQuery = window.$ = function( selector, context )
{
return new jQuery.fn.init( selector, context );
};
jQuery.fn = jQuery.prototype={
init:function(selector,context)
{
alert(context);
}
};
})();
//jQuery.prototype.init("selector","context");
//jQuery.fn.init("selector","context");
/*
上面两种,都可以调用到init(selector, context);
那么,怎么找到jQuery这个变量的呢?
那就是,window.jQuery;
再举一例
*/
//window.tmd= "他妈的";
/*
与这种效果相同:
*/
//var tmp = window.tmd = "他妈的";
/*
这里不是笔误,就是tmp和tmd
*/
//alert(tmd + tmp);
/*
充分说明了,window.变量,可以使这个变量,变成全局变量,而tmp和window.tmd还有tmd都是相同的
注意,这里有一个怪异的函数定义
(function()
{})();
为什么要这样定义呢?原因很简单:
看下面这个例子:
*/
//(function(){alert("ok");})();
/*
这里说明一个问题:就是函数在加载的时候,会扫描这个函数,即,function(){alert("OK");}会被执行
非常类似于函数指针,写得再夸张一点
*/
//(alert("OK"))();
/*
前面括号里面的东西,被执行了;很神奇!!!这种方法,通常用来,生成全局变量用,本例就是;
*/
因为f1只是个函数(构造)
不需要new个实例才能有属性哦see:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD> <BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
var cp = {};
cp.fn = cp.prototype = { //为什么会使用fn和protype啊?直接cp={..code..}不也一样么?
t1:23,
f1:function()
{
return 123;
}
};
cp.fn.f1.prototype = cp.fn;//这是什么意思啊?
//alert(cp.fn.f1()); //我使用alert(cp.fn.f1.t1);不行,提示undefined?
var o = new cp.fn.f1();
alert(o.t1);
//alert(new cp.fn.f1().t1);
//-->
</SCRIPT>
</BODY>
</HTML>
更正一下 :第1、2问说实话没什么
1是将cp对象滴属性fn和原型prototype赋值为一个对象{t1:23,...}2同1,将cp的属性fn(是个对象)滴属性f1(函数对象)滴原型赋值为cp.fn(对象)3是因为f1只是个函数接口,没有实例化为对象,当然不可访问属性
这样就可以了:alert(new cp.fn.f1().t1);
我滴失误,更正一下:
1、2问其实就是给对象cp添加命名属性fn和prototype
并指向后面滴对象{...}
因为var cp={}这句已经指明cp是个对象了,故不存在原型之说了
因为只有function才有这个所谓原型(prototype)属性,而且也是定义时候自动创建和初始化滴
cp对象只是用了prototype这个名称作为其命名属性,它并不是原型哦
呵呵,就这麽多...
参考此贴我的回复。
http://topic.csdn.net/u/20081008/21/798d351c-dd52-445d-8c45-e4bb1a490db4.html