欢迎光临

木子屋

标题: 再说Js构造函数

作者: dnawo

日期: 2009-07-17 10:42 AM

分类: 脚本语言

内容: 复制内容到剪贴板 程序代码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)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.414 ms

返回

标题: 再说Js构造函数

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.414 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.461 ms

返回