var f = new fn();如果function的返回值是对象的话则返回该对象,否则返回function的实例。
2009-07-25 02:23
363 查看
var f = new fn();如果function的返回值是对象的话则返回该对象,否则返回function的实例。
看下边的例子
js 代码
function
fn()
{
this
.k = 1;
return
1;
}
fn.prototype = {
j: 0
};
var
f =
new
fn();
// f = {}
结果出乎意料,竟然是fn的实例({k:1, j:0});为什么又是function的实例了?继续看下面的实验,在fn中分别return各种数据类型的值,得出一下结果
js 代码
return
1; f = {
"j"
:0,
"k"
:1}
return
false
; f = {
"j"
:0,
"k"
:1}
return
true
; f = {
"j"
:0,
"k"
:1}
return
"string"
; f = {
"j"
:0,
"k"
:1}
return
null
; f = {
"j"
:0,
"k"
:1}
return
undefined; f = {
"j"
:0,
"k"
:1}
return
new
Number(1); f = 值为1的Number对象
return
new
String(
"string"
); f = 值为
"string"
的String对象
return
new
Boolean(
true
); f = {}
return
[1]; f = [1]
return
new
Object(); f = {}
注:Boolean在IE和FIREFOX似乎只要声明而没有定义,不管传入的是true还是false,返回的都是{},而且没有ToString()等方法。而且它的prototype也是{} 。其他浏览器没试过,还不清楚。不过估计也是一样的吧。
[修正]Boolean是有定义的,ToString()应该是toString();
实验的结论很明显,如果function的返回值是对象的话则返回该对象,否则返回function的实例
javascript真是一门神奇的语言,容易入门,但是其中的细节和一些技巧却不是一时半会能掌握,每次回过头学都能学到一些新的东西,好像怎么都学不完,继续加油。
看下边的例子
js 代码
function
fn()
{
this
.k = 1;
return
1;
}
fn.prototype = {
j: 0
};
var
f =
new
fn();
// f = {}
结果出乎意料,竟然是fn的实例({k:1, j:0});为什么又是function的实例了?继续看下面的实验,在fn中分别return各种数据类型的值,得出一下结果
js 代码
return
1; f = {
"j"
:0,
"k"
:1}
return
false
; f = {
"j"
:0,
"k"
:1}
return
true
; f = {
"j"
:0,
"k"
:1}
return
"string"
; f = {
"j"
:0,
"k"
:1}
return
null
; f = {
"j"
:0,
"k"
:1}
return
undefined; f = {
"j"
:0,
"k"
:1}
return
new
Number(1); f = 值为1的Number对象
return
new
String(
"string"
); f = 值为
"string"
的String对象
return
new
Boolean(
true
); f = {}
return
[1]; f = [1]
return
new
Object(); f = {}
注:Boolean在IE和FIREFOX似乎只要声明而没有定义,不管传入的是true还是false,返回的都是{},而且没有ToString()等方法。而且它的prototype也是{} 。其他浏览器没试过,还不清楚。不过估计也是一样的吧。
[修正]Boolean是有定义的,ToString()应该是toString();
实验的结论很明显,如果function的返回值是对象的话则返回该对象,否则返回function的实例
javascript真是一门神奇的语言,容易入门,但是其中的细节和一些技巧却不是一时半会能掌握,每次回过头学都能学到一些新的东西,好像怎么都学不完,继续加油。
相关文章推荐
- 将 SqlDataReader 转为Model, 如果 SqlDataReader.read() 有值 ,返回对象,否则返回Null
- Lua自己实现如果对象是指定类或其子类的实例,返回 true
- 注意var $XX = $("#YY", $ZZ);这种虽然是取$ZZ中的id为YY的对象,但是如果id为多个,就会返回多个,而不是像$("#YY")似的返回页面最前面的那个
- 在C++中,为了让某个类只能通过new来创建实例(即如果直接创建对象,编译器将报错),怎样做?
- C++ 对象和实例的区别,以及用new和不用new创建类对象区别
- 再谈Javascript中function fn(){}和var fn=function(){}
- JavaScript new对象的四个过程实例浅析
- 有一个二叉树,现在怀疑它有一个结点有2个父节点,请写出一个函数来判断该二叉树是否存在一个节点含有2个父节点。如果存在,返回true,否则返回false。
- Java使用new和反射实例化内部类对象
- 工厂模式解决如何不通过new来创建实例对象的方法
- JavaScript通过function定义对象并给对象添加toString()方法实例分析
- 条款 31: 千万不要返回局部对象的引用,也不要返回函数内部用 new 初始化的 指针的引用
- #java百问#1构造:构造器没有返回值,但new表达式返回新建对象的引用?
- sql2008函数传入数据如果是N01返回A01否则返回A02
- eval解析JSON中的注意点 在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数。 2. 使用Function对象来进行返回解析。 使用eval
- Self Summary: C++函数返回引用和指针的问题,局部对象与new对象的问题
- ibatis 2.3 调用Oracle Function 返回字符串实例
- 如何必须用new来实例化function
- C++ 对象和实例的区别,以及用new和不用new创建类对象区别
- jquery offset()的对象如果是display:none的,则返回值为0,0