new调用到底返回什么

最近在学习js的设计模式,其中在学习装饰器模式中遇到new调用的问题,一直很疑惑。

 1     var tree = {
 2
 3        decorate:function(){
 4            alert("Make sure the tree won\‘t fall");
 5        },
 6
 7        //tree的某个属性,并继承tree
 8        getDecorate:function(deco){
 9               tree[deco].prototype = this;
10            return new tree[deco];
11        },
12
13        RedBalls:function(){
14          this.decorate = function(){
15             this.RedBalls.prototype.decorate();
16             alert("red");
17          };
18        },
19
20        BlueBalls:function(){
21          this.decorate = function(){
22             this.BlueBalls.prototype.decorate();
23             alert("blue");
24          };
25        },
26
27        AngelBalls:function(){
28          this.decorate = function(){
29             this.AngelBalls.prototype.decorate();
30             alert("Angel");
31          };
32        }
33     };
34
35    tree = tree.getDecorate("RedBalls");
36    tree = a.getDecorate("BlueBalls");
37    tree = a.getDecorate("AngelBalls");
38    tree.decorate();

打印结果:

Make sure the tree won\‘t fall
red
blue
Angel
在我不理解new调用的情况下,我是看不懂为何是打印这样的结果,于是写一个demo。
    function add(m,n){
       alert("执行了我!");
       var result = m+n || 5;
       return result;
    }

    var b = new add;
    alert(b);

执行结果:

执行了我!

[object Object]

耶?怎么会这样??又好像哪里不对,你的new add后面没有加括号,于是我加上括号。

    function add(m,n){
       alert("执行了我!");
       var result = m+n || 5;
       return result;
    }

    var b = new add();
    alert(b);

执行结果:

执行了我!

[object Object]

我晕,还是如此! 到底是哪里出问题了呢?还是直接说吧,将代码改造成这样:

    function add(m,n){
       alert("执行了我!");
       var result = m+n || 5;
       return new String(result);
    }

    var b = new add();
    alert(b);

执行结果:执行了我!5

... 终于得到我想要的结果了。

总结:

1.new 调用时

加括号与不加括号,都会执行函数代码块,加括号可用于传参。

当函数体返回值为基础数据类型时(如string,number等),则new调用后得到的是一个函数的实例,即Object,除非对基础数据类型作包装(new String,new Number等)

2.普通调用

这样方式的调用必须加括号,不管函数有无参数。函数返回什么类型则接收到的就是什么类型。


				
时间: 2024-10-30 08:44:53

new调用到底返回什么的相关文章

jQuery的ajax调用webservice返回XML数据传参错误

jQuery的ajax调用webservice返回XML数据传参错误: 有时候使用jquery的ajax调用带有参数的webservice返回XML格式输出的时候,会出现传参错误,当然错误的原因可能是多种多样的,下面就简单介绍一种. 一.错误代码: 1.ajax代码: $.ajax({ type:"post", url:"_service.asmx/getDataFromATable", data:" { tablename: temp }",

[转]jQuery调用ASPX返回json

本文转自:http://www.cnblogs.com/fire-phoenix/archive/2009/11/13/1614146.html 本文介绍如何在ASP.NET(ASP.NET/AJAX)里使用基于JQuery的AJAX技术.(源代码下载见最后) 在使用JQuery前,请到www.jquery.com下载最新版本的js代码,然后再代码里使用 <script src="_scripts/jQuery-1.3.2.js" type="text/javascri

调用AJAX返回JSON、XML数据类型

1.调用AJAX返回JSON数据 用下拉列表显示Nation表民族名称 主页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <he

shell调用函数返回值深入分析

编写shell脚本过程中,我们经常会自定义一些函数,并根据函数的返回值不同来执行相应的流程,那么我们如何来获取函数的返回值呢? 首先shell中调用函数有两种方式: 第一种:value=`function_name [arg1 arg2 ......]` 或 第二种:function_name [arg1 arg2 ......] echo $? 这两种有什么区别呢? 举个例子来说: [[email protected] ~]# cat test.sh #!/bin/sh function aa

SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法

1.SpringMVC中通过@ResponseBody返回对象,作为JQuery中的ajax返回值 package com.kuman.cartoon.controller; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.commons.io.filefilter.FalseFileFilter; import org.slf4j.Logger; import org.s

jQuery调用WebService返回JSON数据

相信大家都比较了解JSON格式的数据对于ajax的方便,不了解的可以从网上找一下这方面的资料来看一下,这里就不多说了,不清楚的可以在网上查一下,这里只说一下因为参数设置不当引起的取不到返回值的问题. 在用jQuery调用WebService的时候,它contentType默认为 以下是WebService服务端的代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.W

JavaSE8基础 链式编程 调用方法返回对象再调方法 简单示例

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        代码: class Person { public void sayHello() { System.out.println("hello world"); } } class Tools { public static Person getPersonObj() { return new Person()

《深入Java虚拟机学习笔记》- 第19章 方法的调用与返回

<深入Java虚拟机学习笔记>- 第19章 方法的调用与返回

调用odata返回406 not acceptable解决方案

调用odata返回406 not acceptable解决方案 在web api项目中使用odata时,总是返回406 not acceptable 根据http://stackoverflow.com/questions/26676879/webapi-and-odatacontroller-return-406-not-available和http://stackoverflow.com/questions/26676879/webapi-and-odatacontroller-return