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 相关文章推荐
js以对象为索引的关联数组
Jul 04 Javascript
HTML中的setCapture和releaseCapture使用介绍
Mar 21 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
Sep 24 Javascript
javascript实现类似超链接的效果
Dec 26 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
Jul 05 Javascript
jquery模拟实现鼠标指针停止运动事件
Jan 12 Javascript
AngularJs  unit-testing(单元测试)详解
Sep 02 Javascript
JavaScript中常用的验证reg
Oct 13 Javascript
jQuery niceScroll滚动条错位问题的解决方法
Feb 03 jQuery
Vue-component全局注册实例
Sep 06 Javascript
Vue动态修改网页标题的方法及遇到问题
Jun 09 Javascript
VUE 自定义组件模板的方法详解
Aug 30 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
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
如何写php程序?
2006/12/08 PHP
提高define性能的php扩展hidef的安装和使用
2011/06/14 PHP
在项目中寻找代码的坏命名
2012/07/14 PHP
基于empty函数的判断详解
2013/06/17 PHP
ajax+php控制所有后台函数调用
2015/07/15 PHP
Laravel重定向,a链接跳转,控制器跳转示例
2019/10/22 PHP
javascript AutoScroller 函数类
2009/05/29 Javascript
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
Javascript面向对象扩展库代码分享
2012/03/27 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
Bootstrap 网站实例之单页营销网站
2016/10/20 Javascript
JS限制条件补全问题实例分析
2016/12/16 Javascript
javascript学习之json入门
2016/12/22 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
2016/12/28 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
Vuejs 单文件组件实例详解
2018/02/09 Javascript
手写Node静态资源服务器的实现方法
2018/03/20 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
jquery检测上传文件大小示例
2020/04/26 jQuery
javascript实现放大镜功能
2020/12/09 Javascript
python 获取文件列表(或是目录例表)
2009/03/25 Python
python3实现windows下同名进程监控
2018/06/21 Python
python批量获取html内body内容的实例
2019/01/02 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
创业计划书的主要内容有哪些
2014/01/29 职场文书
学校后勤岗位职责
2014/02/19 职场文书
婚礼答谢宴主持词
2014/03/14 职场文书
自我鉴定标准格式
2014/03/19 职场文书
史学专业毕业生求职信
2014/05/09 职场文书
离婚答辩状怎么写
2015/05/22 职场文书
导游词之天津古文化街
2019/11/09 职场文书
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
2021/04/25 Python