JavaScript-函数、对象、方法、变量和类
一、函数与对象的关系
当我们定义一个函数时,系统会创建一个对象,该对象是Function实例。
如下代码:
<script type="text/javascript">
//定义一个匿名函数,并将它赋值给变量hello
var hello = function(name)
{
alert(name + "您好!");
}
//判断该匿名函数是否为Function实例,是否为Object实例
//可用instanceof运算符判断
if((hello instanceof Function) && (hello instanceof Object))
{
alert("hello是Function对象,同时也是Object对象!");
}
else
{
alert("hello啥也不是...");
}
//若没有参数,则直接输出函数的源代码
alert(hello);
</script>
运行后:
二、函数与方法的关系
当我们定义一个函数时,若将该函数附加给某个对象,即可成为该对象的方法。
如下代码:
<script type="text/javascript">
//定义一个函数,该函数也是一个类
function Person(name,age)
{
//将参数name的值赋给实例属性name-注意区别
this.name = name;
//将参数name的值赋给实例属性name-注意区别
this.age = age;
//使用匿名函数定义一个名为info的方法
this.info = function()
{
document.writeln("我今年" + this.age + "岁,是一个名叫" + name + "的大猪蹄子!" );
}
}
//创建一个对象,传入name和age参数
var myPer = new Person('老玄武',21);
//执行info方法
myPer.info();
</script>
运行后:
需要注意的是,如果没有明确指定将函数附加到哪个对象上,该函数将附加到window对象上,作为该对象的方法。
三、函数与变量的关系
当我们定义一个函数时,同时会得到一个变量。
如下代码:
<script type="text/javascript">
//定义一个函数,默认对象为window对象
function hello(name)
{
document.write(name + "您好!");
}
//访问hello,直接输出源代码
alert(hello);
//对hello变量赋值,相当于把hello函数(也是变量)重新赋值了
hello = "大猪蹄子";
//此时的hello已不再是一个函数,而是一个普通变量,若传入参数,则报错
hello("猪头焖子");
</script>
因此,在定义变量、函数时尽量不要重名,否则会出现变量覆盖函数的情形。
四、函数与类的关系
当我们定义一个函数时,同时会得到一个与函数同名的类,该函数也是该类唯一的构造器。
因此在定义一个函数后,有以下两种方式调用函数:
1.直接调用函数:总是返回该函数内部最后一条return语句的返回值,若无return语句,则没有任何返回值。
2.使用new关键字调用函数:总有一个返回值,返回值为一个JavaScript对象
如下代码:
<script type="text/javascript">
//定义一个函数,该函数也是一个类
function test(name)
{
return "你好,我是" + name;
}
//直接调用函数
var rval = test("一号选手");
//使用new关键字调用函数
var obj = new test("二号选手");
alert(rval + "\n" + obj);
</script>
运行后:
day 2018.11.08
整理自《疯狂HTML+CSS+JavaScript讲义第二版》
邮箱:707904142@qq.com