现在的位置: 首页 > 综合 > 正文

韩顺平网页设计第三十一三十二讲

2014年07月26日 ⁄ 综合 ⁄ 共 1842字 ⁄ 字号 评论关闭

当我们创建一个类对象的时候,希望创建对象以后就有一些属性,可以通过this关键字来实现。

p1.name访问的是自己的name。不是person类型的name,因为它是私有的属性。类的公有属性可以通过this.name2来表示name2属性是公开的,它的实例可以访问。this关键字用于区分私有的还是公开的。

  
     function Person()
     {
     	var name = "abc"; //私有属性,只能在内部访问。
     	var age =90;   //私有属性
     	this.name2 ="abc2";  //公有属性,可以通过其对象来访问
     	this.show = function() //公开的方法
     	{
     		window.alert(name+" "+age);  //这是person类的公开方法。
     		show2();  //在类里面调用私有方法。
     	}
     	function show2()  //这是person类的私有方法,私有方法和私有属性只能在类内部使用。
     	{
     		window.alert("nihao ");
     	}
     }
     var p1 = new Person();
     p1.show();
     //pi.show2();    //报错
     //p1.name+p1.age   //错误

那个对象实例调用this所在的函数,那么这个this就表示那个对象实例。

 function test1()   //这个方法属于默认对象window
     {
     	alert(this.v); //如果window调用这个方法,this表示window对象
     }                   //window表示当前页面对象。
     var v=90;
     window.test1();    //这个属性属于默认对象window  。显示的结果是90. 等价于test1();
     //alert("ok");与 window.alert("ok");一样。

this变量只能在类的方法中使用,不能在类定义以外使用。在类外使用可能会变成另外一个对象。

给js对象添加方法的方式:

     function person()
     {
     	this.name = "abc";
     	this.age = 900;
     	this.show=function show()  //第一种方式创建方法。类的所有对象都可以调用这个方法。
     	{
     	 document.write("nihao "+this.age);
     	}
     }
     function show1()
     {
         document.write("hello "+this.name);
     }
      var p1 = new person();
      //如果show1加上(),表示把show1的返回值给abc。
      //给类对象添加方法的第二种方法。
      p1.abc = show1;  //p1新建一个abc方法,方法和show1一样。
      p1.abc();  // 调用第二种方法。只有p1可以用这个方法。
      p1.show(); //调用第一种方法
      document.write(show1); //直接打印出函数。

function Dog()
      {}
      var dog1 = new Dog();
      dog1.shout = function() //只属于dog1的方法。
      {
      	document.writeln("给dog1动态添加方法");
      }
      dog1.shout();
      var dog2 = new Dog();     
      dog2.shout();  //出错。。。

prototype属性的使用:通过它绑定的方法是属于类的,不是属于对象的,所有对象公用一个通过它绑定的属性和方法。

可以解决每个对象独占一个方法的缺点(占用太多内存)。可以通过prototype来让多个对象共享一个方法。

function Dog()
       {      	
       }
      //使用prototype[类]去绑定一个函数给shout。
      //所有的js对象都有一个prototype属性,这个属性可以动态的绑定一个值。
      //这个类的所有对象可以共享protytype属性绑定的方法。
      Dog.prototype.shout = function(){
       	 		document.writeln("hahahahahah");
      }
      var dog1 =new Dog();
      var dog2 = new Dog();
      dog1.shout();
      dog2.shout();
      document.writeln(dog1.shout==dog2.shout);    //可以用于判断两个对象是不是同一个对象。用地址判断。

运行结果如下:

hahahahahah hahahahahah true

内存示意图:

==的作用:

当==两边都是字符串的时候,则比较内容是否相等。返回一个true。

当==两点是数字,则判断数字是否相等。

当==两边是对象,则比较对象的地址时候相等。如果相等,返回true。

抱歉!评论已关闭.