您当前的位置:首页 > 网站建设笔记 >

javascript 将构造函数当作函数

0

构造函数与其他函数的唯一区别,就在于调用它们的方式不同。不过,构造函数毕竟也是函数,不存在定义构造函数的特殊语法。任何函数,只要通过new操作符来调用,那它就可以作为构造函数,而任何函数,如果不通过new操作符来调用,那它跟普通函数也不会有什么两样。例如,前面例子中定义的Person()函数可以通过下列任何一种方式来调用。

<script type="text/javascript">
function Person(name,age,job){
	this.name=name;
	this.age=age;
	this.job=job;
	this.sayName=function(){ADS.log.write(this.name);};
}
//当作构造函数使用
var person = new Person("wangzhanchengxu",29,"Software Engineer");
person.sayName();

//作为普通函数调用
Person("LuSheng",30,"PHPer");
window.sayName();

//在另一个对象的作用域中调用
var o = new Object();
Person.call(o,"wangzhanbj",31,"SEOer");
o.sayName();
</script>

这个例子中的前两行代码展示了构造函数的典型用法,即使用new操作符来创建一个新对象。接下来的两行代码展示了不使用new操作符调用Person()会出现什么结果:属性和方法都被添加给window对象了。有读者可能还记得,当在全局作用域中调用一个函数时,this对象总是指向Global对象(在浏览器中就是window对象)。因此,在调用完函数之后,可以通过window对象来调用sayName()方法,并且还返回了"LuSheng"。最后,也可以使用call()或者apply()在某个特殊对象的作用域中调用Person()函数。这里是在对象o的作用域中调用的,因此调用后o就拥有了所有属性和sayName()方法。

顶部中部底部