`
xiushan
  • 浏览: 30643 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

平凡的JavaScript

阅读更多

 

Javascript web 应用开发使用非常的频繁,它可以轻易帮助我们实现数据验证,完成特殊效果或动作。今天我们就来谈谈 Javascript 的一些事。

 

JavaScript 对象

       看到“对象”二字,听惯面向对象编程的你,是否第一感觉是要有个类,然后进行实例化生成一个对象? Javascript 恰恰相反,它没有 “类”的概念。分“类”有助于我们理解和使用东西,但是在我们享受这些福利的同时“类”也限制了我们的思想,编程应该是自由的, Javascript 抛弃了类的概念,从而也解放了我们。接下来我们看一下 Javascript 是怎么海阔天空的。

示例一:

 

var testObj = {};

testObj.name = "testObj";

//testObj.name.firstName = "a";   //简单数据类型不是对象,所以不能给它加属性

testObj.remark = "您可以给我随便加属性";
 ……
alert(testObj.name);

alert(testObj.remark);
 

       示例中我首先创建了一个对象 testObj , 一开始它里面什么都没有,空的,什么都不能做,然后我给它加了一个名字属性,再给它加了个备注属性,它开始成为一个“具体”的东西了(当然你还可以给它加 方法),之后你就可以使用这里面的这些属性和方法了。如果你对这些属性和方法不满意,你还可以随时删除它们,或者新增其他的属性和方法。

示例二:

// 接示例一脚本

 

TestObj.say = function(){      //增加一个说话的方法

  alert(“Hi!我可以说话了!”);

};

TestObj.name = undefined;    //我不想让人知道我的名字,删掉这个属性
 

Javascript 的是可以随意删掉对象里的属性和方法的,删除方法很简单,就是把这个属性或方法置为 undefined Javascript 中找不到某个对象或方法时就会提示你“ undefined ”(未定义),于是我们要删除对象的某个属性时就强制把它设置为 undefined ,就是告诉解析器这个属性我不要了,如果下面的脚本要使用它,就跟它们说没了。

       也许你注意到示例一中的被注释掉的红色代码了,没错,我是想告诉你,简单数据类型(包括 string number null boolean undefined )它们都不是对象,不能使用对象的这些特性。

 

函数( function

       函数有两种定义方式:定义式和变量式。

示例三:

 

function funcA(){

       alert(“定义式!”);

}

var funcB = function(){

       alert(“变量式!”);

}
 

       这两种写法几乎等价的,细微的不同点在于定义式创建时函数会在脚本执行前就被声明了(后面讲 javascript 脚本执行方式会提及),我们可以在脚本的任何地方使用这个函数。变量式创建函数时则不行,如果我们在创建前使用这个函数,那是不可能成功的。

我们可以认为, Javascript 的函数就是一个特殊的变量 , 变量类型 function ,变量名 : funcB ,变量值 : 函数代码体代码,这个变量的变量值可以执行的,同样,作为一个变量,它也是可以进行赋值的。

示例四:

 

var funcA = function (){

alert("funcA");

};

funcA();//输出funcA

funcA = function (){

alert("funcB");

};

funcA();//输出funcB
 

函数具有对象的全部特征。同样你可以对函数内部的属性进行增加删除。

示例五:

// 接示例四脚本

 

funcA.name = “funcA”;  //我有名字了

alert(“大家好!我叫”+ funcA.name);

funcA.name = undefined; //我的名字被剥夺了!

 

Javascript支持重载吗?

       Javascript是不支持重载的。

示例六:

function funcA(str1, str2){

       alert(str1 + “ and ” + str2);

}

function funcA(str1){

       alert(str);

}

funcA(“a”,”b”);      //输出 a

funcA(“a”);           //输出 a
 

Javascript 中后声明的函数会覆盖掉前面声明的函数,这里的第二个函数才是有效的,当你传两个参数时,第二个参数会被忽略掉。

       如果你实在是想重载怎么办?那么我告诉你一种方法吧。

       我称之为“伪重载”,其实这里连“伪”都谈不上,因为我们只是利用 javascript 函数的一个特性,在同一个函数上打主意,让人看起来这个函数被重载了一样。

       Javascript 函数有个特性,他可以灵活的传递参数的个数。

示例七:

 

function func2(a,b,c){

       alert("a+b="+(a+b));

       if(c){

              alert("a+b+c="+(a+b+c));

       }

}

func2(1,2);     //输出a+b=3

func2(1,2,3);  //输出a+b+c=6
 

Javascript 脚本在执行时是不管函数定义时有多少个参数的,一切皆由你来控制。这是否能满足你的要求呢?

 

JavaScript 脚本执行方式

       JavaScript 执行引擎并非一行一行地分析和执行程序,而是一段一段( 为一段)地分析执行的。而且,在同一段程序的分析执行中,定义式的函数语句会被提取出来优先执行。函数定义执行完之后,才会按顺序执行其他语句代码,另外名称相同的函数后定义的函数会覆盖掉前面声明的函数。

示例八:

第一个 script 段中在第一次调用 func 之前,第一个函数语句定义的代码逻辑,已被第二个函数定义语句覆盖了。所以,两次都调用都是执行最后一个函数逻辑了,而第二个 script 段的 func 没受到影响。

       Javascript 虽然是脚本型语言,简单、易用,但它还有很多特性或技巧还值得我们去深究,我们只有不断去发掘才会写出更优雅的代码来。

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics