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 相关文章推荐
JavaScript 组件之旅(三):用 Ant 构建组件
Oct 28 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
Oct 21 Javascript
javascript的创建多行字符串的7种方法
Apr 29 Javascript
AngularJS实现Model缓存的方式
Feb 03 Javascript
AngularJS入门教程之控制器详解
Jul 27 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
Aug 24 Javascript
JavaScript编写棋盘覆盖代码详解
Aug 28 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
Sep 18 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
Nov 21 Javascript
vue-router+nginx 非根路径配置方法
Jun 30 Javascript
微信小程序实现打卡日历功能
Sep 21 Javascript
js实现简单的无缝轮播效果
Sep 05 Javascript
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
中英文字符串翻转函数
2008/12/09 PHP
php利用cookie实现访问次数统计代码
2011/05/19 PHP
利用PHP扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
2014/11/18 PHP
jquery聚焦文本框与扩展文本框聚焦方法
2012/10/12 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
js实现按Ctrl+Enter发送效果
2014/09/18 Javascript
深入理解Node.js的HTTP模块
2016/10/12 Javascript
Bootstrap3 多个模态对话框无法显示的解决方案
2017/02/23 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
javascript中toFixed()四舍五入使用方法详解
2018/09/28 Javascript
JS中的函数与对象的创建方式
2019/05/12 Javascript
vue-cli3添加模式配置多环境变量的方法
2019/06/05 Javascript
layui使用templet格式化表格数据的方法
2019/09/16 Javascript
微信小程序学习总结(五)常见问题实例小结
2020/06/04 Javascript
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
用python登录Dr.com思路以及代码分享
2014/06/25 Python
django通过ajax发起请求返回JSON格式数据的方法
2015/06/04 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
python将字符串list写入excel和txt的实例
2019/07/20 Python
python实现tail实时查看服务器日志示例
2019/12/24 Python
Pycharm修改python路径过程图解
2020/05/22 Python
Python把图片转化为pdf代码实例
2020/07/28 Python
学习Python需要哪些工具
2020/09/04 Python
分享全球十款超强HTML5开发工具
2014/05/14 HTML / CSS
高中毕业的自我鉴定
2013/12/09 职场文书
村委会换届选举方案
2014/05/03 职场文书
品酒会策划方案
2014/05/26 职场文书
2014年学生会部门工作总结
2014/11/07 职场文书
2014年财务个人工作总结
2014/12/08 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
谢师宴家长致辞
2015/07/27 职场文书
大学生党课心得体会
2016/01/07 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书
导游词之镇江西津古渡
2019/11/06 职场文书