文档章节

JavaScript:new 一个函数和直接调用函数的区别分析

Andy0520
 Andy0520
发布于 2016/06/15 12:00
字数 404
阅读 23
收藏 0

或许许多人对此不以为然,在函数前加 new 关键字,不就是实例化一个对象吗?但事情显然没那么简单

function Test() { 
  this.name = 'Test'; 
  return function() { return true; } 
} 

var test = new Test(); // 这里的 test 是什么? 

  是一个 Test 对象吗?错!这里 test 是一个函数——Test 中返回的 function() { return true; }。这时,new Test() 等效于 Test(),注意,是等效于,不是等于,如果使用new Test() == Test() 判定两者是否相等,则会返回 false,因为 Javascript 对于 Object 和 Function 的比较是基于引用的。   为了更清晰的分辨在上述情形下两者间的区别,请继续看以下代码:

function Test() { 
  this.name = 'Test'; 
  return 'Test'; 
} 
var fnT = Test(); 
var newT = new Test(); 

  显然,fnT 是字符串 Test,那 newT 呢?呵呵,是不是被第一个样例迷惑了?其实,此时 newT 是一个 Test 对象——有一个名为 name 的属性,其值为字符串 Test。   通过上面两段代码,我们可以得出一个猜测,**> 如果函数返回值为常规意义上的值类型(Number、String、Boolean)时,new 函数将会返回一个该函数的实例对象,而如果函数返回一个引用类型(Object、Array、Function),则 new 函数与直接调用函数产生的结果等同。**通过在 Test 函数中返回不同类型的值进行测试,可以证实这一点。     分清这一点,其实还是蛮重要的,至少在看一些面向对象的框架类库代码时,会少一些疑惑。

本文转载自:http://www.jb51.net/article/39653.htm

共有 人打赏支持
Andy0520
粉丝 11
博文 31
码字总数 3614
作品 0
嘉兴
程序员
私信 提问
JavaScript学习笔记-原型继承

JavaScript基于原型的编程语言,本身并不包含内置的类实现。但是可以通过Javascript模拟出类 类 JavaScript中有构造函数和New运算符。构造函数用来实例对象和初始化属性。任何JavaScript函数...

墨鱼ID
2012/09/06
0
6
javascript引擎在c,c+中调用

JavaScript是一种广泛用于Web客户端开发的脚本语言,常用来控制浏览器的DOM树,给HTML网页添加动态功能。目前JavaScript遵循的web标准的是ECMAScript262。由于JavaScript提供了丰富的内置函数...

crossmix
2015/04/19
0
0
JavaScript当中的this究竟是个啥?

对于JS的初学者而言,JS当中的this指向很难让人摸准其脉络,经常会给你一种模糊美、朦胧美的感脚!因为this并不是固定不变的,它会根据自身所执行的环境的不同而不同。而且在开发的过程中,经...

张培跃
06/18
0
0
JavaScript终极BOSS_函数

你确定掌握了JS的函数,真的确定吗? 警告:最后一站:秋名山,座下乃AE86,无法保证不撒豆腐,路途颠簸刺激,请务必拉好扶手! JavaScript函数 函数过于恶心,我们由浅入深,一点一点来,相...

风蓝小栖
08/08
0
0
《JavaScript权威指南》笔记(二)

第二篇笔记的内容主要涉及:数据类型转换,函数、对象、数组的创建以及null与undefined的比较。 1. javascript中类型转换的方法: (1)数字-->字符串: number+" "; String(number); number...

小微
2012/08/28
0
7

没有更多内容

加载失败,请刷新页面

加载更多

Java 如何实现线程间通信?

正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了。 本文涉及到的知识点: thread.join(), object....

颖辉小居
18分钟前
1
0
记一次阿里云服务器运行慢排除

公司测试环境用的阿里云服务器+docker部署的,一共跑了14个项目。之前几个月一直OK,最近几天突然很卡很慢。刚开始以为是项目问题,又是扩大内存,又是清减插件,甚至停了一半项目。结果CPU...

李玉长
19分钟前
1
0
统一客服消息返回错误:{"errcode":43004,"errmsg":"require subscribe hint: [9Vv08633952]"}

公众号或者小程序发送客服消息错误: {"errcode":43004,"errmsg":"require subscribe hint: [9Vv08633952]"} 场景:小程序使用公众号的服务消息,推送消息,如果接收人没有关注公众号,就会出...

tianma3798
30分钟前
1
0
Rainbond V5.0 Beta公测公告

Rainbond支撑企业应用的开发、架构、交付和运维的全流程,通过“无侵入”架构无缝衔接各类企业应用,底层资源可以对接和管理IaaS、虚拟机和物理服务器 Rainbond V5.0即日起开启Beta版本公测,...

好雨云帮
48分钟前
2
0
Word Pattern(leetcode290)

Given a pattern and a string str, find if str follows the same pattern. Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empt......

woshixin
54分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部