MMP我才发现ecplise的mar版本居然没有tomcat,我自己手动给加了一个tomcat,我靠~
JS的函数相当于是一个对象,但是要具体怎么理解呢?
<script type="text/javascript">
function say(name,age){
alert(name+"今年"+age+"岁了");
}
say("张三",12);
//也可以这么写,这里我们new了一个方法对象,前面可以跟参数,后面跟的是方法体
var sayfunc = new Function("name","age","alert(name+'今年'+age+'岁了')");
sayfunc("李四",15);
alert("方法参数的个数:"+sayfunc.length);
//显示方法的源码,但是function后面跟的是anonymous,这个也是表示匿名的意思
//valueOf():返回最适合该对象类型的原始值;
//toString(): 将该对象的原始值以字符串形式返回。
alert(sayfunc.toString());
alert(sayfunc.valueOf());
</script>
以上就是把JS中的函数作为一个对象来使用,但是我总感觉似曾相识,貌似在哪里见过
下面这个是声明一个全局变量,然后在函数中调用
<script type="text/javascript">
var a = 22;
function func(){
//这个a是全局变量,所以我们可以读取到
alert(a);
}
//这个就相当于在这里调用了func函数,等于说再js中调用自己函数
func();
//页面会输出两个22
</script>
<script type="text/javascript">
function func2(){
//这个a相当于是局部变量
var a = 23;
//这个时候b就是全局变量
b = 23
}
//所以就是在方法外调用一个局部变量
func2();
//这个时候的a是无法输出的,因为是一个局部变量
//alert(a);
//这个时候b就可以输出了
alert(b);
</script>
那么如何在函数中读取私有的变量也就是局部变量
<script type="text/javascript">
function func(){
//这是一个私有的变量
var a = 25;
//这个可以理解成为一个构造函数
function func2(){
return a;
}
return func2;
}
//这样就调用了私有的变量,原理就是闭包,闭包的定义就是“定义在一个函数内部的函数”,闭包的作用一个是可以读取到函数中的变量,一个就是让这些变量始终保持在内存中。由于闭包使得函数中的变量都存在于内存中,所以内存消耗很大,因此我们不要滥用闭包
var result = func();
alert(result());
</script>
更加高级一点的应用:
<script type="text/javascript">
//定义一个全局变量name
var name = "the window";
//定义了一个object对象
var object={
name:"my name",
age:function func(){
return function(){
return this.name;
}
}
};
alert(object.name);
alert(object.age()());
</script>
这是第一个alert的:
这是第二个alert的:
但是我也是一脸懵逼。。。
JS中的创建对象
<script type="text/javascript">
//js的初始化器创键对象
var marry = {
name :"qxf",
age: 2,
shout:function(){
alert("我是"+this.name+"今年"+this.age);
},
action:function(){
alert("会吃");
}
};
alert(marry.name);
alert(marry.age);
marry.shout();
marry.action();
</script>
构造方法创建js对象
<script type="text/javascript">
//使用构造方法来创建对象
function Dog(name,age){
this.name = name;
this.age = age;
this.shout = function(){
alert("我是"+this.name+"今年"+this.age);
};
this.action = function(){
alert("会吃");
};
}
var jack = new Dog("jack",1);
alert(jack.name);
</script>
对象属性的定义:
分为三种:对象属性,私有属性,类属性
<script type="text/javascript">
function c(){
this.obj = "对象属性";
c.prototype.obj2 = "对象属性2";
var privatePro = "私有属性";
}
c.ClassPro = "类属性";//类似于static变量
alert(c.ClassPro);
var c2 = new c();
alert(c2.obj);
alert(c2.obj2);
//私有属性只有通过闭包才能够拿出来
</script>
对象方法:
三种:私有方法,对象方法,类方法:
<script type="text/javascript">
function C(){
var privatemethod = function(){
alert("私有方法");
};
//调用内部的私有方法
privatemethod();
this.objFun = function(){
alert("对象方法");
};
C.prototype.objFun2 = function(){
alert("对象方法2");
}
}
C.classFun = function(){
alert("类方法");
};
C.classFun();
var c = new C();
c.objFun();
c.objFun2();
</script>
js中的继承
<script type="text/javascript">
function Animal(name,age){
this.name = name;
this.age = age;
this.shout = function(){
alert("我是"+this.name+"今年"+this.age);
};
this.action = function(){
alert("会吃");
};
}
//继承
function Dog(name,age){
//将Animal的age和name给Dog,这种继承只是继承了属性和方法,但是真正的类型并没有改变
Animal.apply(this,[name,age]);
}
var jack = new Dog("jack",1);
alert(jack.name);
alert(jack.age);
jack.shout();
jack.action();
</script>