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与prototype框架的详细对比
Nov 21 Javascript
兼容所有浏览器的js复制插件Zero使用介绍
Mar 19 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
Jul 28 Javascript
js文本框走动跑马灯效果代码分享
Aug 25 Javascript
基于javascript实现checkbox复选框实例代码
Jan 28 Javascript
基于ExtJs在页面上window再调用Window的事件处理方法
Jul 26 Javascript
JavaScript截屏功能的实现代码
Jul 28 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
Feb 02 jQuery
在Mac下彻底卸载node和npm的方法
May 16 Javascript
原生js检测页面加载完毕的实例
Sep 11 Javascript
react 应用多入口配置及实践总结
Oct 17 Javascript
基于jQuery实现挂号平台首页源码
Jan 06 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 页面执行时间计算代码
2008/12/04 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
php+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
js DataSet数据源处理代码
2010/03/29 Javascript
script标签属性type与language使用选择
2012/12/02 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
js实现杯子倒水问题自动求解程序
2013/03/25 Javascript
JSON格式的键盘编码对照表
2015/01/29 Javascript
jQuery中通过ajax的get()函数读取页面的方法
2016/02/29 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
jQuery实现动态删除LI的方法
2017/05/30 jQuery
ExtJs异步无法向外传值和赋值的完美解决办法
2017/06/14 Javascript
Node.js简单入门前传
2017/08/21 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
2020/02/16 Javascript
vue路由的配置和页面切换详解
2020/09/09 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
Python pass 语句使用示例
2014/03/11 Python
使用Python脚本将文字转换为图片的实例分享
2015/08/29 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
pytorch 修改预训练model实例
2020/01/18 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
用python批量移动文件
2021/01/14 Python
英国一家专门出售品牌鞋子的网站:Allsole
2016/08/07 全球购物
Nike墨西哥官网:Nike MX
2020/08/30 全球购物
物流管理毕业生自荐信
2013/10/24 职场文书
初中生自我评价
2014/02/01 职场文书
公司踏青活动方案
2014/08/16 职场文书
2014最新毕业证代领委托书
2014/09/26 职场文书
同学聚会祝酒词
2015/08/10 职场文书
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
2021/06/07 Python
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server