日期:2014-05-16 浏览次数:20493 次
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <script type="text/javascript"> // javascript的面向对象的编程思想 //创建一个对象 var person = new Object(); //alert(person);//会弹出是object类型 //我们该如何为该对象添加属性呢? //alert(person.length);//如果此时我们弹出它的长度属性的话,出现未定义 //但是假设我们开始就有一个字符串呢? var str = new Object("hello,felayman"); //alert(str.length);//这里会弹出14,因为在创建对象的同时,赋予了它对象类型 //那么,我们该如何给我们为初始化的person添加属性呢? person.name = "felayman"; person.age = 22; //这样我们就给person对象添加了两个属性 //alert("姓名:"+person.name+",年龄:"+person.age); //既然是面向对象的思想,我们可以为对象添加属性,那么自然也可以为对象添加方法 //person.getname();//如果出现在这里,遭了,程序会报错 person.getname = function(){ alert("姓名:"+person.name+",年龄:"+person.age+",测试成了?"); } //我们试试看,能不能调用该方法呢? //person.getname(); /*那么假如我们上面这句话放在getname方法的定义之前会出现什么情况呢? 因此,上述的对象定义的方法就不好了,因为对象的属性和方法太分散了,那么 有么有一个比较好的方法呢?当然有,那就是JSON格式(尽管有人给他叫字面量) */ var user = { name:"felayman", age:22, job:"student", getAttr:function(){ alert("姓名:"+this.name+",年龄:"+this.age+",职业:"+this.job); } }; //这样我们就创建了一个对象的同时,并且为该对象添加了属性和方法,看,是不是跟java很象了 //这样的风格清晰明朗,封装性极强,因此,在编写面向对象的javascript脚本时,这样刚刚无疑是租好的 //我们测试一下 //alert(user);//测试user的类型,我是测试成功了 //user.getAttr();//我也测试成功了 //我们测试一下对对象属性的修改,此时我们并没有涉及到数据的作用域 user.name = "felay"; //user.getAttr();//测试成功 /*下面出现一个问题,我们该如何象java那样对对象的属性和方法,进行作用域设置呢 java对属性和方法的保护是通过private,protected,public来空值的,那么 javascript又是怎么进行的呢?下面我们将尝试这么做 */ //假如我们想对某对象的一个属性来进行只读属性的设置,怎么做呢?如下 var obj = {};//创建一个对象 Object.defineProperty(obj,"name",{ writale:false, value:"felay_man" }); //上述代码就创建一个具有name属性的对象obj,但是,这个name属性是只读的 //alert(obj.name);//会弹出felay_man //那么我们测试一下对name属性进行修改 obj.name = "hello"; //alert(obj.name);//依然是弹出felay_man //假如我把上述的writable属性改为true呢?也许很多人觉得能够进行修改,可惜是不行的 //当然我们也可以想java那样使用setter和getter进行属性的获取 var book={ //这里的属性前面带上的'_',其含义就是该属性可以通过getter进行属性的获取 _version:1.8, _author:"felayman" }; Object.defineProperty(book,"version",{ get:function(){ return this._version; }, set:function(version){ this._version = version; } }); //上述代码就对book对象设置了两个就可以使用setter和getter进行属性的获取和修改了 //alert(book._version);//这里依然能够获取的到 //因此上述的方法相当麻烦,而且和我们普通的JSON格式创建的对象没有什么区别,这样做只是 //增加规范而已,因此我们平时不建议这么写 </script> <title>javascript面向对象编程</title> </head> <body> </body> </html>