JavaScript中判断函数是new还是()调用的区别说明


Posted in Javascript onApril 07, 2011

方式1

function Person(n,a){ 
this.name = n; 
this.age = a; 
if(this instanceof Person){ 
alert('new调用'); 
}else{ 
alert('函数调用'); 
} 
} 
var p = new Person('jack',30); // --> new调用 
Person(); // --> 函数调用

方式2
function Person(n,a){ 
this.name = n; 
this.age = a; 
if(this instanceof arguments.callee){ 
alert('new调用'); 
}else{ 
alert('函数调用'); 
} 
} 
var p = new Person('jack',30); // --> new调用 
Person(); // --> 函数调用

方式3
function Person(n,a){ 
this.name = n; 
this.age = a; 
if(this.constructor === arguments.callee){ 
alert('new调用'); 
}else{ 
alert('函数调用'); 
} 
} 
var p = new Person('jack',30); // --> new调用 
Person(); // --> 函数调用

看似很完美,但当把函数/类作为自身实例对象的方法时调用就出问题了
function Person(n,a){ 
this.name = n; 
this.age = a; 
if(this.constructor === arguments.callee){ 
alert('new调用'); 
}else{ 
alert('函数调用'); 
} 
} 
var p = new Person('jack',30); // 先new一个对象 
p.fn = Person; // 把函数/类 Person 赋值给自身对象p的fn属性 
p.fn(); // 这句调用时提示“这是new调用”,显然不对

还有更好的方法吗?
Javascript 相关文章推荐
JQuery的自定义事件代码,触发,绑定简单实例
Aug 01 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
Nov 03 Javascript
JavaScript SetInterval与setTimeout使用方法详解
Nov 15 Javascript
vue 实现 tomato timer(蕃茄钟)实例讲解
Jul 24 Javascript
基于bootstrop常用类总结(推荐)
Sep 11 Javascript
基于ionic实现下拉刷新功能
May 10 Javascript
jquery分页插件pagination使用教程
Oct 23 jQuery
微信小程序Echarts图表组件使用方法详解
Jun 25 Javascript
解决Vue动态加载本地图片问题
Oct 09 Javascript
Vue+Element实现网页版个人简历系统(推荐)
Dec 31 Javascript
JS apply用法总结和使用场景实例分析
Mar 14 Javascript
jquery实现简单拖拽效果
Jul 20 jQuery
JavaScript中清空数组的三种方法分享
Apr 07 #Javascript
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
Apr 07 #Javascript
javascript各浏览器中option元素的表现差异
Apr 07 #Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
Apr 07 #Javascript
我的javascript 函数链之演变
Apr 07 #Javascript
JavaScript中链式调用之研习
Apr 07 #Javascript
js中各浏览器中鼠标按键值的差异
Apr 07 #Javascript
You might like
用php实现的下载css文件中的图片的代码
2010/02/08 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
2012/01/20 PHP
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
ThinkPHP中使用Ueditor富文本编辑器
2015/09/02 PHP
Yii2实现让关联字段支持搜索功能的方法
2016/08/10 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
Jquery带搜索框的下拉菜单
2013/05/06 Javascript
JavaScript实现按照指定长度为数字前面补零输出的方法
2015/03/19 Javascript
JavaScript中省略元素对数组长度的影响
2016/10/26 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
vue实现评论列表功能
2019/10/25 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
[11:44]Ti9 OG夺冠时刻
2019/08/25 DOTA
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
python线程中同步锁详解
2018/04/27 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
2020/06/04 Python
基于Jquery和Css3代码制作可以缩放的搜索框
2015/11/19 HTML / CSS
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
庆八一活动方案
2014/01/25 职场文书
优秀幼教自荐信
2014/02/03 职场文书
国际贸易专业个人鉴定
2014/02/22 职场文书
劲霸男装广告词改编版
2014/03/21 职场文书
2014年社区重阳节活动策划方案
2014/09/16 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
MySQL命令无法输入中文问题的解决方式
2021/08/30 MySQL