javascript小结

原创 2011年01月20日 21:19:00

1.对象的声明:
1.1 function student(name,age...){
this.Name=name;
this.Age=age;
...
}
1.2 JSON (javascript object notation)
JSON是一种键/值对方式来描述内部成员的格式,其内部成员可以是几乎任何一种类型的对象,当然也可以是方法、类、数组,也可以是另外一个JSON对象。
var student = {
Name: "张三",
Age: 20,
Hobby: "读书",
Books: [
{
BookName : "C#" ,
Price : 70
},
{
BookName : "Java" ,
Price : 70
},
{
BookName : "Javascript" ,
Price : 80
}
]
};
上面静态的构造出了student对象,不同于其他语言的是JavaScript还可以添加新的属性。例如:
student.Introduce = function() {
            var stuInfo = "姓名:" + this.Name +
                         ",年龄:" + this.Age +
                         ",爱好:" + this.Hobby +
                         ",拥有的书:" +
                         this.Books[0].BookName + "、" +
                         this.Books[1].BookName + "、" +
                         this.Books[2].BookName;
            alert(stuInfo)
        };
        student.Introduce();
      student对象原来并没有Introduce方法,第一次为student.Introduce赋值会在student对象中创建一个新的成员,后面如果再为student.Introduce赋值则会覆盖上一次所赋的值。当然我们这的值是一个function。也可以用类似索引的方式来添加成员。
        student["Introduce"] = function() {
          ……
        };
 
        student.Introduce();
当然添加的成员也可以删除掉。删除掉之后则成为undefined,再访问该成员时则不支持。
        delete student.Introduce;
还有一个很有用的操作可以遍历对象的所有属性:
for (var key in student) {
            document.write(key + " : " + student[key] + "<br />");
        };
这里需要注意一个数组和对象的区别,先讲讲数组也有类似的索引方式:
var array = [];
        array["一"] = "A";
        array["二"] = "B";
        array["三"] = "C";
        array["四"] = "D";
        alert(array["一"] + array["二"] + array["三"] + array["四"]);
这种方式把数组当做了hashtable,不过注意把数组当成Hashtable来操作时,要注意,并非是为数组添加数组元素,而是在数组对象中添加新的属性成员。而且如果for(var key in array)循环遍历数组对象的话,key得到的却不是array对象的属性名称,而是数组元素的索引号。
2对象的操作
JavaScript不支持重载,如果你写了两个函数,第二个会覆盖第一个,不过我们还是有办法的。
function中有个arguments属性,可以把它看成一个数组,它按传递进来的参数的顺序来保存所有的参数。也就是说我们在定义方法时可以不声明参数名。
function Hello() {
            if (arguments.length == 0) {
                alert("hello , everybody!");
            }
            else {
                alert("hello , " + arguments[0] + "!");
            };
        };
 
        Hello();
        Hello("张三");
      基于参数个数不同的重载。
        function Increase(arg) {
            if (typeof arg == "undefined") {
                alert("请输入参数");
            }
            if (typeof arg == "string") {
                alert(String.fromCharCode(arg.charCodeAt(0) + 1));
            }
            if (typeof arg == "number") {
                alert(arg + 1);
            }
        };
        Increase();
 
        Increase("a");
        Increase(1);
      基于参数类型不同的重载
3匿名类和立即执行类
匿名类
function() {
            ……
        };
   在窗体加载时,在标题上显示当前时间
        window.onload = function() {
            document.title = new Date().toString();
        };
 
    也可以将匿名方法传入定时器中
       setInterval(function() {
            document.title = new Date().toString();
        }, 1000);
    使用匿名函数绑定事件和进行定时操作。
        var Hello = function() {
            alert("hello , everybody!");
        };
如果将匿名函数赋给变量,那和有名的普通函数就没区别了。但不管是变量引用还是普通地有名函数,这样的函数在内存上都持久的占有一定资源。有时候我们只想执行一次大不必使用有引用的函数,直接执行匿名函数可能是最好的选择。把匿名函数包起来,加个括号执行,一切ok,这就是由匿名函数延伸出来的立即执行函数。
        (function() {
            alert("hello ,  everybody!");
        })();
 
        (function(somebody) {
            alert("hello , " + somebody + "!");
        })("张三");
立即执行函数在做事件绑定,设置回调函数等方面往往会有意想不到的效果,可以解决诸如对象引用等问题。
        var student = {
            Name: "张三",
            Age: 20,
            Introduce: function() {
                alert("我叫" + this.Name + ",今年" + this.Age + "岁了!");
            } };
        window.onload = (function(obj) { return function() { obj.Introduce(); }; })(student);
因为javascript中函数的这些特点加之它的对象的特征,我们还可以写出一些有functional意味的程序出来。其实javascript中function真的是老大。
        function Sum(fun, x) {
            if (x <= 0)
                return 0;
            return fun(x) + Sum(fun, x - 1);
        };
4 类的私有性及相关操作
细节内容很多,大体有这么几个要注意的。
1定义类用function,创建用 var X= new x();如
function Lady() {
            var age = 30;
            var name = "菜花";
 
            var think = function() {
                alert("其实我今年" + age + "岁。");
            };
            
            function fancy(){
                alert("幻想变成20岁。");
            };
 
            this.Introduce = function() {
                alert("我叫" + name + " , 今年20岁。");
            };
        };
 
        var younglady = new Lady();
    但是这里就有了访问性问题,直接调用younglady.think()是不可以的,因为他(用var定义)是私有的。
那么如何调用呢?有两个办法
a 特权成员:用this定义的成员
比如将上面例子的var think=改为this.think=就可以调用younglady.think()
b 公共成员:prototype
    普通公共成员的创建,不在类的里面来编码,而是通过类的prototype来创建。添加普通公共成员都直接添加到类的prototype中,而prototype就是一个像JSON对象一样的成员集对象。当我们进行对象创建时,可以认为会将类prototype中的成员整体copy入新的Object对象中。
        var younglady = new Lady();
        younglady.Introduce(); //Introduce
 
        Lady.prototype.Hobby = "上网";
        Lady.prototype.GetName = function() {
            return this.Name;
        };
        
        var lady2 = new Lady();
        alert(lady2.GetName());
        alert(lady2.Hobby);
    在添加普通成员的时候也可以来个批量的添加,直接用一个新的JSON对象来赋给prototype就可以了。但是要注意,现在是将原先的prototype进行了替换,在替换之前创建的对象引用的是旧的prototype对象,所以对prototype替换之前创建的对象不会有Hobby和GetName成员。
        Lady.prototype = {
            Hobby: "上网",
            GetName: function() {
                return this.Name;
            }
        };
        var younglady = new Lady();
        alert(younglady.GetName());
        alert(younglady.Hobby);
    除了在构建类时可以添加公共成员,还可以对对象直接进行成员操作。对对象直接添加的成员,也是一种公共成员,这些成员也可以和类中原先具有的公共成员进行访问。
        younglady.SetName = function(name) {
            this.Name = name;
        };
        younglady.SetName("菜明");
        alert(younglady.GetName());

其实相当于读后感,大量借鉴了heros blog的东西,下面附上原帖地址
原帖写的很好,可惜停了,继承那些可能还要自己看,到时候争取写出些自己原汁原味的东西吧
再次向作者致敬,要是文章触犯版权请联系我@@

Html+css+javascript总结

网站开发的主要原则是: – 用标签元素HTML描述网页的内容结构; – 用CSS描述网页的排版布局; – 用JavaScript描述网页的事件处理,即鼠标或键盘在网页元素上的动作后的...
  • huichao199175
  • huichao199175
  • 2016年03月22日 10:43
  • 912

2010.10.24实习阶段小结

这篇本来想在离开公司前最后一天写的,但是忙得挤不出时间来写,拖到了现在……     当日早上报到,处理完手续,下午接到一份需求,是跟移动公司的一个研究性项目。 当时,mentor第一个就提问我...
  • jasonblog
  • jasonblog
  • 2010年10月24日 16:40
  • 1409

javascript小结

一、javascript通过列表框控制页面跳转function jump(selectname){   if(document.all(selectname).value != 0)   { if(t...
  • sjlpc
  • sjlpc
  • 2004年11月11日 10:07
  • 355

JavaScript小结

最开始学习js的时候,没感觉js与以前学过的编程语言有什么差距;因为从语法结构上来看也是有三大结构:顺序,选择,循环;也有基本的数据类型,变量,操作符等,下面就具体总结一下关于JavaScript的知...
  • jly4758
  • jly4758
  • 2014年02月05日 15:24
  • 1738

matlab小结

本组成员郑志远,张苓琬,于鹏朔。本周小组初步计划完成数组及多维数组方面的所有学习,最终学习到数组最基本部分,离预想环节有一点距离。...
  • zhengzhiyuan14
  • zhengzhiyuan14
  • 2015年10月19日 18:27
  • 183

Javascript小结

HTML中的表单是完成交互性的主要手段,一般数据的传送都是通过submit提交给servlet,servlet再对数据进行处理。 Javascript里面所有的变量都用var来声明,虽然说是说可以为...
  • adafox51
  • adafox51
  • 2013年12月06日 17:47
  • 379

JavaScript 小结

onchange  事件 function upperCase(x) { var y=document.getElementById(x).value document.getElemen...
  • cslie
  • cslie
  • 2015年10月10日 10:16
  • 243

javascript 小结

JavaScript总结 ****************************JavaScript *************************************...
  • yangnuowei88
  • yangnuowei88
  • 2012年08月30日 06:47
  • 196

javaScript小结

初识javaScript,并不感到陌生,因为在牛腩新闻发布中已经用过,在针对性的学习这块儿的时候,其实感觉和学VB是一样的,就是属性、事件、方法,再新的就是正则表达式,看师哥师姐的博客,也有所耳闻,所...
  • wangdan199112
  • wangdan199112
  • 2014年08月26日 15:08
  • 993

计算机学习总结

计算机学习计划总结从10年6月开始,主要完成的计算机学习计划有: 算法与数据结构 面对对象设计语言及进阶 Java C++入门 *操作系统 编译原理 其他计算机本科课程 算法与数据结构 主要通过公...
  • tony2909
  • tony2909
  • 2015年05月20日 21:01
  • 180
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:javascript小结
举报原因:
原因补充:

(最多只允许输入30个字)