木子屋 Dnawo's BLOG

再说Js构造函数

👤 dnawo 📅 2009-07-17 👁 11453 👍 0 💬 0 🔄 来源:本站原创
function Rectangle(w,h)
{
	this.width = w;
	this.height = h;
	
	return "mzwu.com";
}

上边构造函数和我们常见的构造函数稍有不同:有返回值,这对我们实例化对象有影响吗?测试一下:

var rectangle = new Rectangle(100,120);
alert(rectangle.width);

结果完全正常[1],再做个测试:

alert(Rectangle(100,120));

结果显示"mzwu.com",这就和调用普通函数没区别了。

可以这么理解:当普通函数使用new关键字来实例化时,会有一个this对象被传进函数中,函数内可对这个对象进行处理,此时普通函数也称为构造函数。[2]

构造函数稍做修改:

function Rectangle(w,h)
{
	this.width = w;
	this.height = h;
	
	return this.width;
}

alert(Rectangle(100,120));

等效于:

function Rectangle(w,h)
{
    this.width = w;
    this.height = h;
}
Rectangle(100,120);
alert(width);

当函数作普通函数使用时,里边的this指的是window对象,当作构造函数用时,表示的是构造函数对象。

原型对象是构造函数特有的吗?

测试一下:

function Add(a,b)
{
	return a+b;
}

alert(!!Add.prototype);

结果:true,这说明任何函数都有原型对象,并非构造函数才有。



[1].《JavaScript权威指南》五版(P157)中说明:构造函数通常没有返回值。它们初始化作为this的值来传递的对象,并且没有返回值。然而,一个构造函数是允许返回一个对象值的,并且,如果它这么做,返回的对象成为new表达式的值。在此情况下,作为this的值的对象会被抛弃。

function Rectangle(w,h)
{
	this.width = w;
	this.height = h;
	
	return {url:"mzwu.com"};
}
var rectangle = new Rectangle(100,120);
alert(rectangle.width);
alert(rectangle.url);

结果:

undefined
mzwu.com

[2].《JavaScript权威指南》五版(P156)中对构造函数说明:new运算符的后面必须跟着一个函数调用。new创建了一个新的没有任何属性的对象,然后调用该函数,把新的对象作为this关键字的值传递。设计来和new运算符一起使用的函数叫做构造函数。

评论(0)

暂无评论。

验证码
评论需审核通过后显示
← 上一篇 设置/获取IIS来宾帐户IUSR的密码 下一篇 → FF下无法移动元素解决方法