开始学习面向对象了,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面向对象
最新推荐文章于 2024-12-31 13:56:41 发布