開始學習面向對象了,JavaScript面向對象和Perl的面向對象都是有些怪異,但也好理解,Perl是通過子程序來創建一個構造函數,而JavaScript是通過一個方法(function)來創建一個類,而且,你只是一般調用這個方法,那它就是一個函數,而new一個時,它就是一個類了 !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Js1.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<!-- <script type="text/javascript">-->
<script language="javascript" src="myjs.js"></script>
<script language="javascript">
//catx類
function catx(){
}
//創建對象
var cat = new catx();
cat.name="小白";
cat.age=3;
document.write(cat.name+cat.age+"<br />");
//另一種對象訪問的方式cat['name']=cat.name
document.write(cat['name']+cat.age+"xx <br />");
if (cat instanceof catx){
document.write("cat 是catx的對象 <br />");
}
if (cat.constructor == catx){
document.write("cat11 是catx的對象 <br />");
}
document.write(cat.constructor+"catx的構造函數 <br />");
//帶var與不帶var的區別,var相當於定義了一個全局變量
var dlhx = 90;
function testx(){
//在函數中,如果你不帶var,則表示使用全局變量dlhx
//如果你帶上var,表示testx()中,定義一個新的變量dlhx
var dlhx = 80;
}
document.write(dlhx+"dlhx <br />");
function person(){}
//因爲對象a,b都指向同一個地址,所以,只要改變了一個,另一個也會變
var a = new person();
a.age=10;
a.name='小華';
var b = a;
document.write(b.age+"對象引用 <br />");
b.name='小燕子';
document.write(b.name+" "+a.name+"對象引用 <br />");
//把b的對象對a的引用,斷開了,就是對象沒有了,刪掉對象,b.name就訪問不到值了
b=null;
delete a.age;//刪掉對象a的屬性
document.write("++++++++++++++++++++++++++++++++ <br />");
function pox(){
var x = 1; //用var代表私有,外面不能直接訪問,只能在內部用
var y = 'kk';
this.m=22;//用this代表公有,外面可以直接訪問
this.show=function (){
document.write(x+"類中公有方法 <br />");
show2()//可以在先調公開方法,公開方法中再調私有方法
}
function show2(){
document.write(x+"類中私有方法,外面不可調用 <br />");
}
}
var a = new pox();
document.write(a.m+" <br />");
a.show();
// a.show2();
//這裏會輸出90,因爲test1這時是一個函數,而this的對象代表window
//
function test1(){
document.write(this.v+" mm <br />");
}
var v = 100;
//test1(); // =window.test()
function xfg(){
this.v = 110;
}
var k1 = new xfg();
//k1.test1(); //這裏會輸出100,因爲test1這時是一個函數,而this的對象代表window
//誰調用這個它,誰就代表它是this(那個對象的實例調用了this,那這個this
//就代表了這個實例函數)
//this只能在類內部中或類的方法中使用,不能這時的this就不是類了,而
//可能是window了
function test1(){
document.write(this.v+" mm xx <br />");
}
var v = 100;
test1(); // =window.test()
document.write(this.v+" mm <br />");
function xfg(){
this.show = function(){
document.write(this.vx+" mm <br />");
}
}
var k1 = new xfg();
k1.vx = 'hi';
k1.show();
document.write("++++++++++++++++++++++ <br />");
function hans(name,age){
this.name=name;
this.age=age;
this.show = function(){
document.write(this.name+" name <br />");
}
this.add = function(){
var tmp = 0;
for (var i =0;i <= 10;i++){
tmp+=i;
}
return tmp;
}
//計算從小加到n
this.addx = function(n){
var tmp = 0;
for (var i =0;i <= n;i++){
tmp+=i;
}
return tmp;
}
}
var k1x = new hans('dlh',20);
k1x.show();
var x = k1x.add();
document.write(x+" xx <br />");
document.write(k1x.addx(100)+" addx <br />");
function tmp(){
document.write(" 爲對象動態增加一個方法,任何對象都可以指向這個方法 <br />");
}
//爲對象動態增加一個方法,這裏是abc指向tmp的方法(引用)
k1x.abc = tmp;
k1x.abc();
//只能是abcx的對象引用這個方法
k1x.abcx = function tmpx(){
document.write(" 爲對象動態增加一個方法,且只能爲當前調用它的對象增加,其它的不行 <br />");
}
k1x.abcx();
//這裏會把tmp的函數打印出來,因爲是tmp,而沒有帶tmp()
document.write(tmp+" tmp === <br />");
</script>
</body>
</html> |
JavaScript面向對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.