您的位置:首页 > Web前端 > JavaScript

javascript函数的几个相关概念

2008-12-19 15:30 302 查看
---------------------------------------------------------------
概念1. 一个函数被定义, 实际上就是创建了一个Function类的对象.
---------------------------------------------------------------

在以下4种方法等效的方法定义中,可清晰看到上述结论

方法1(标准)
function showText(text)
{
alert(test);
}
showText("hi, tomsui!~");

方法2
show = function showText(text)
{
alert(text);
}
show("hi, tomsui!~");

方法3(匿名方法)
show = function(text)
{
alert(text);
}
show("hi, tomsui!~");

方法4(显式定义对象)
show = new Function("text","alert(text);");
show("hi, tomsui!~");

注意: 作为一个对象,肯定会有默认的toString(),可以直接打印这个对象,其实就是函数体本身:
alert(show) // function anonymous(text) { alert(text); }
alert((showText)) // function showText(text) { alert(test); }

---------------------------------------------------------------
概念2. Function类的对象有一个prototype属性
---------------------------------------------------------------
这个prototype属性是一个对象:

function showText(text)
{
alert(test);
}
alert(showText.prototype); // [object, Object]
alert(typeof(showText.prototype)); // object
alert(showText.prototype.constructor); // function showText(text) { alert(test); }

构造器的prototype属性作为一个object, 本身存在一个不可for-in的属性"constructor",指向该构造器本身(打印出来的话是函数体定义)

注意: "Function类的对象",不是每一个普通对象(通过new关键字生成)都有prototype属性的!

---------------------------------------------------------------
概念3. Function类的对象有一个constructor属性
---------------------------------------------------------------

function showText(text)
{
alert(test);
}

alert(showText.constructor); // function Function() { [native code] }
alert(typeof(showText.constructor)); // function

关于Function类的对象(showText函数)的constructor属性:
1) 是"一段不可显示的本地代码" (而不像是showText的prototype属性一样是一个对象)
2) 它的类型是"function"

---------------------------------------------------------------
总结. prototype属性,constructor属性, construct属性 概述
---------------------------------------------------------------

如果把对象( 根据一个对象是否为Function对象 )分为两类:
a. 一个函数对象 (Function类的对象)
b. 一个普通对象 (通过new关键字结合构造函数创造的"非Function类"对象)

那么:
1. 函数对象存在prototype 属性, 而普通对象不存在;
2. 函数对象存在constructor属性, 普通对象不存在; constructor属性的type是"function",toString后是一段“本地代码”(native),
3. 普通对象存在construct 属性, 函数对象不存在; construct 属性是type是"function" ,toString后是“函数代码本身”,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: