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 学习笔记(六)
Dec 31 Javascript
JavaScript中为元素加上name属性的方法
May 09 Javascript
JSONP 跨域共享信息
Aug 16 Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
Apr 10 Javascript
Javascript图片上传前的本地预览实例
Jun 16 Javascript
浅谈javascript中createElement事件
Dec 05 Javascript
jQuery中attr()方法用法实例
Jan 05 Javascript
JavaScript采用递归算法计算阶乘实例
Aug 04 Javascript
jquery实现右侧栏菜单选择操作
Mar 04 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
Jul 06 Javascript
详解vue-cli + webpack 多页面实例应用
Apr 25 Javascript
Vuex利用state保存新闻数据实例
Jun 28 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
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
JavaScript监测ActiveX控件是否已经安装过的代码
2008/09/02 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
node.js中的fs.linkSync方法使用说明
2014/12/15 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
关于json字符串与实体之间的严格验证代码
2016/11/10 Javascript
Vue自定义指令详解
2017/07/28 Javascript
Vue 拦截器对token过期处理方法
2018/01/23 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
2019/10/10 jQuery
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
[43:03]完美世界DOTA2联赛PWL S2 PXG vs Magma 第二场 11.21
2020/11/24 DOTA
Python生成任意范围任意精度的随机数方法
2018/04/09 Python
django2.0扩展用户字段示例
2019/02/13 Python
python实现的分层随机抽样案例
2020/02/25 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
在 Python 中使用 7zip 备份文件的操作
2020/12/11 Python
浅析python实现动态规划背包问题
2020/12/31 Python
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
"引用"与指针的区别是什么
2016/09/07 面试题
.NET笔试题(20个问题)
2016/02/02 面试题
大学生毕业求职的自我评价
2013/09/29 职场文书
早会主持词
2014/03/17 职场文书
公司授权委托书格式样本
2014/10/01 职场文书
承租经营合作者协议书
2014/10/01 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书
小学语文教学反思范文
2016/03/03 职场文书
八年级语文教学反思
2016/03/03 职场文书
多人股份制合作协议书
2016/03/19 职场文书
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python
Java内存模型之happens-before概念详解
2021/06/13 Java/Android
MySQL中varchar和char类型的区别
2021/11/17 MySQL